Vous pouvez le faire en utilisant un CTE
et 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
Fondamentalement, le CTE a joint l'élément et l'événement et ajouté une nouvelle colonne pour le numéro de ligne et est partitionné sur l'élément.ID. Voici une capture d'écran de ce à quoi cela ressemble. À partir de là, je sélectionne simplement rNum =1 qui devrait être la date d'événement maximale pour chaque item.id.