Obtenir la première ligne de chaque groupe

Clippy
Messages : 22157
Inscription : mer. 22 avr. 2026, 17:33

Obtenir la première ligne de chaque groupe

Message par Clippy »

Obtenir la première ligne de chaque groupe

ayi
Site Admin
Messages : 9242
Inscription : mer. 22 avr. 2026, 17:21

Re: Obtenir la première ligne de chaque groupe

Message par ayi »

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.

Répondre

Revenir à « SQL Server »