Можете да направите това, като използвате 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 е съединил елемент и събитие и е добавил нова колона за rownumber и е разделен на item.ID. Ето екранна снимка на това как изглежда. От тук просто избирам rNum =1, което трябва да бъде максималната дата на събитие за всеки item.id.