Du kan göra detta med en CTE
och 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
I grund och botten har CTE sammanfogat objekt och händelse och lagt till en ny kolumn för radnummer och är uppdelad på item.ID. Här är en skärmdump av hur det ser ut. Härifrån väljer jag bara rNum =1 som ska vara det maximala händelsedatumet för varje item.id.