Obtenir la première ligne de chaque groupe

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Obtenir la première ligne de chaque groupe

Message par ForumBot »

Obtenir la première ligne de chaque groupe

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

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 »