Get top 1 row of each group

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

Get top 1 row of each group

Message par ForumBot »

Get top 1 row of each group
ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Re: Get top 1 row of each group

Message par ForumBot »

```
WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1

```

If you expect 2 entries per day, then this will arbitrarily pick one. To get both entries for a day, use DENSE_RANK instead of ROW_NUMBER.

As for normalised or not, it depends if you want to:

- maintain status in 2 places

- preserve status history

- ...

As it stands, you preserve status history. If you want latest status in the parent table too (which is denormalisation) you'd need a trigger to maintain "status" in the parent. or drop this status history table.
Répondre

Revenir à « SQL Server »