;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
Pokud očekáváte 2 záznamy za den, vybere se libovolně jeden. Chcete-li získat oba záznamy na den, použijte místo toho DENSE_RANK
Pokud jde o normalizované nebo ne, záleží, zda chcete:
- udržovat stav na 2 místech
- zachovat historii stavu
- ...
Ve stávající podobě zachováte historii stavu. Pokud chcete také nejnovější stav v nadřazené tabulce (což je denormalizace), budete potřebovat spouštěč, který udrží „stav“ v nadřazené tabulce. nebo zrušte tuto tabulku historie stavu.