;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
Se ti aspetti 2 voci al giorno, questo ne sceglierà una arbitrariamente. Per ottenere entrambe le voci per un giorno, usa invece DENSE_RANK
Per quanto riguarda la normalizzazione o meno, dipende se vuoi:
- mantieni lo stato in 2 posizioni
- conserva la cronologia dello stato
- ...
Così com'è, conservi la cronologia dello stato. Se vuoi anche lo stato più recente nella tabella padre (che è la denormalizzazione) avresti bisogno di un trigger per mantenere lo "stato" nel genitore. o elimina questa tabella della cronologia dello stato.