Możesz to zrobić za pomocą CTE
i 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
Zasadniczo CTE połączył element i zdarzenie i dodał nową kolumnę dla numeru wiersza i jest podzielony na element.ID. Oto zrzut ekranu, jak to wygląda. Stąd po prostu wybieram rNum =1, która powinna być maksymalną datą zdarzenia dla każdego item.id.