Obtenir la première ligne de chaque groupe
Obtenir la première ligne de chaque groupe
Re: Obtenir la première ligne de chaque groupe
WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
Si vous attendez 2 entrées par jour, alors cela en choisira une de manière arbitraire. Pour obtenir les deux entrées d’un jour, utilisez DENSE_RANK au lieu de ROW_NUMBER.
Quant à savoir si c’est normalisé ou non, cela dépend de si vous souhaitez :
maintenir le statut à 2 endroits
préserver l’historique des statuts
…
En l’état, vous préservez l’historique des statuts. Si vous souhaitez aussi le dernier statut dans la table parente (ce qui est de la dénormalisation), vous auriez besoin d’un déclencheur pour maintenir le « statut » dans la table parente. Ou bien supprimer cette table d’historique des statuts.