SQL でそれぞれの ID 毎の最新の日付のレコードを抽出する
SPECIAL
ID ごとの最新の日付のレコードを取得する
例えば次のようなテーブルがあったとします。
販売履歴
ID | 履歴の通し番号です。 |
---|---|
商品ID | 販売した商品の ID 番号です。 |
販売日 | 販売した日付です。 |
販売時価格 | 販売時の価格です。 |
この "販売履歴" テーブルには、"商品ID" で明示された商品について、それが販売される事に "販売履歴" にレコードを追加して行くものとします。
このとき、"販売履歴" から、それぞれの "ItemID" についての最新の販売履歴を抽出したい場合には、次のような SQL 文を実行します。
SELECT * FROM 販売履歴 T1 WHERE NOT EXISTS (SELECT * FROM 販売履歴 T2 WHERE T1.商品ID = T2.商品ID AND T1.販売日 < T2.販売日)
"販売履歴" テーブル(販売履歴 T1)から抽出する際に、同じ "商品ID" の販売履歴(販売履歴 T2 WHERE T1.商品ID = T2.商品ID)の中で(AND)どんなレコードよりも小さい "販売日" を持ったレコード(T1.販売日 < T2.販売日)以外(NOT EXISTS)、すなわち唯一大きい販売日(最近販売した "販売履歴")という条件で抽出しています。