Puoi farlo utilizzando un CTE
e 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
Fondamentalmente il CTE ha unito l'elemento e l'evento e ha aggiunto una nuova colonna per il numero di riga ed è partizionato su item.ID. Ecco uno screenshot di come appare. Da qui seleziono semplicemente rNum =1 che dovrebbe essere la data massima dell'evento per ogni item.id.