;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 você espera 2 entradas por dia, isso escolherá uma arbitrariamente. Para obter as duas entradas de um dia, use DENSE_RANK
Quanto ao normalizado ou não, depende se você deseja:
- manter o status em 2 lugares
- preservar o histórico de status
- ...
Do jeito que está, você preserva o histórico de status. Se você também quiser o status mais recente na tabela pai (que é desnormalização), precisará de um gatilho para manter o "status" no pai. ou elimine esta tabela de histórico de status.