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)、すなわち唯一大きい販売日(最近販売した "販売履歴")という条件で抽出しています。