Puede hacerlo utilizando un CTE
y 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
Básicamente, el CTE se ha unido al elemento y al evento y ha agregado una nueva columna para el número de fila y está dividido en elemento.ID. Aquí hay una captura de pantalla de cómo se ve. Desde aquí, solo selecciono rNum =1, que debería ser la fecha máxima del evento para cada item.id.