SQL FIRST関数 LAST関数は不安定

先頭のレコードを返すFIRST関数、末尾のレコードを返すLAST関数、Access固有の関数

SQL = " SELECT FIRST(フィールド名) AS 名前 FROM テーブル名 "
SQL = " SELECT LAST(フィールド名) AS 名前 FROM テーブル名 "
FIRST関数は先頭のレコードを返します。
LAST関数は末尾のレコードを返します。
Access固有の関数です。

実際に使って見ると、やはり違う値が返りました。
Microsoftサーポートオンラインにも「First および Last 関数が期待どおりのレコードを返さない」と記載されています。
http://support.microsoft.com/default.aspx?scid=kb;ja;208190
それによりますと、「First()、Last()、DFirst()、および DLast() 関数では、並べ替え順、インデックス、および主キーが無視されます。
これらの関数は、指定された並べ替え順での先頭または最後のレコードではなく、レコードがテーブルに入力されたときの順序
に基づいて、削除されていない先頭または最後のレコードを返します。 」とあります。



BackHome BackSQL Tips

サンプルソフト
[実行時の画面]
「先頭レコード FIRST関数」ボタンをクリックすると、先頭のアクセス数の500を期待しますが、400となっています。
「最終レコード LAST関数」ボタンをクリックすると、末尾のアクセス数の512を期待しますが、503となっています。

■実行画面
レコードの移動

[アクセス テーブル]
アクセスID   日付    アクセス数
102007/09/10   500
112007/09/11   481
132007/09/12   652
162007/09/13   503
172007/09/14   400
182007/09/15   450
192007/09/16   520
202007/09/17   421
212007/09/18   450
222007/09/19   468
232007/09/20   512
アクセス推移

[コード]
Private Sub コマンド59_Click()
    Dim SQL As String
    Dim rs As Recordset
    SQL = "SELECT LAST(アクセス数) FROM アクセス"
    Set rs = CurrentDb.OpenRecordset(SQL)
    Me!テキスト2 = rs(0)
    Set rs = Nothing
End Sub

Private Sub コマンド8_Click()
    Dim SQL As String
    Dim rs As Recordset
    SQL = "SELECT FIRST(アクセス数) FROM アクセス"
    Set rs = CurrentDb.OpenRecordset(SQL)
    Me!テキスト1 = rs(0)
    Set rs = Nothing
End Sub

サンプルソフトのダウンロード

BackHome BackSQL Tips

Copyright(C) FeedSoft