スポンサーリンク

2007-08-05

SQL文 集計関数のFIRST関数、LAST関数は使用しない方がいい

dim SQL as String
dim rs As Recordset
SQL = " SELECT FIRST(フィールド名) AS 名前 FROM テーブル名 "
Set rs = CurrentDb.OpenRecordset(SQL)
FIRSTは先頭レコードを取得することができる関数ですが、期待する値が返されない場合があります。

SQL = " SELECT LAST(フィールド名) AS 名前 FROM テーブル名 "
LASTは最終レコードを取得することができる関数ですが、期待する値が返されない場合があります。

実際に下記テーブルでテストすると(IDはオートナンバー型です)
--------------------
ID  testname  数量
--------------------
110503  a0  100
110504  a1  200
110505  a2  300
110506  a3  400
110511  a4  50
110512  a5  10
110513  a6   60
--------------------
FIRST関数の場合、50が返りました。
LAST関数の場合、400が返りました。

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

オートナンバー型を使用し、MAX関数・MIN関数で取得した方がいいようです。