クエリー:グループごとに特定条件でのレコード抽出 |
対象バージョン : 97, 2000, 2002, 2003, 2007
最終更新日 : 2007/02/25
( オリジナル作成日:2000/02/06 )
概 要
『各支店ごとに最新の取引日のレコードを抽出する』などのように、一つ、あるいは複数のフィールドが同じ値のレコードのうち、特定の条件のレコードを一つのクエリーで抽出する方法です。
解 説
抽出条件にサブクエリーを使用します。
以下の例では、MDB ではクエリーのSQLビューで、ADP
ではビューで SQL 表示されているものを示したものです。
次のようなテーブル "取引状況" があるものとします。
顧客番号 | 取引日 | 取引区分 |
取引額 |
10001 | 1998/11/10 | 1 | 10,000 |
10001 | 1998/12/20 | 2 | 15,000 |
10001 | 1999/01/15 | 1 | 12,300 |
10001 | 1999/06/11 | 1 | 150,600 |
10001 | 1999/10/21 | 1 | 2,680 |
10002 | 1999/01/30 | 2 | 1,356,120 |
10002 | 1999/02/14 | 2 | 56,020 |
10003 | 2000/02/06 | 1 | 89,600 |
【例1】
顧客番号ごとに、最新の取引を抽出する。
SELECT * FROM 取引状況 WHERE 取引状況.取引日 = (SELECT MAX(取引状況_1.取引日) FROM 取引状況 AS 取引状況_1 WHERE 取引状況.顧客番号 = 取引状況_1.顧客番号) |
抽出結果
顧客番号 | 取引日 | 取引区分 |
取引額 |
10001 | 1999/10/21 | 1 | 2,680 |
10002 | 1999/02/14 | 2 | 56,020 |
10003 | 2000/02/06 | 1 | 89,600 |
【例2】
顧客番号・取引区分ごとに、最新の取引を抽出する。
SELECT * FROM 取引状況 WHERE 取引状況.取引日 = (SELECT MAX(取引状況_1.取引日) FROM 取引状況 AS 取引状況_1 WHERE 取引状況.顧客番号 = 取引状況_1.顧客番号 AND 取引状況.取引区分 = 取引状況_1.取引区分) |
抽出結果
顧客番号 | 取引日 | 取引区分 |
取引額 |
10001 | 1998/12/20 | 2 | 15,000 |
10001 | 1999/10/21 | 1 | 2,680 |
10002 | 1999/02/14 | 2 | 56,020 |
10003 | 2000/02/06 | 1 | 89,600 |
補 足
●上記【例1】の場合、MDB でのクエリーのデザインビューでは、次のように指定します。
取引日の抽出条件に、次のように指定します。
(SELECT MAX(取引状況_1.取引日) FROM 取引状況 AS 取引状況_1 WHERE 取引状況.顧客番号 = 取引状況_1.顧客番号) |
前後を必ず括弧でくくります。
●最古の取引日で抽出したい場合は、MAX 関数の代わりに MIN 関数を指定します。