クエリー:グループごとに特定条件でのレコード抽出 Hit Counter

対象バージョン : 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 関数を指定します。


目次へ戻る