CTE
を利用してこれを行うことができます およびrow_number()
。
;with cte as
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY i.id ORDER BY e.EventDate DESC) as rNum
FROM Item i
JOIN Event e
ON i.id between e.ItemStart and e.ItemEnd
)
SELECT ID,
Name,
EventType,
EventDate FROM cte
WHERE rNum = 1
基本的に、CTEはアイテムとイベントを結合し、行番号の新しい列を追加し、item.IDでパーティション化されています。これがどのように見えるかのスクリーンショットです。ここから、各item.idの最大イベント日付となるrNum=1を選択します。