;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
Jeśli oczekujesz 2 wpisów dziennie, to arbitralnie wybierze jeden. Aby otrzymać oba wpisy na jeden dzień, użyj zamiast tego DENSE_RANK
Znormalizowane czy nie, zależy od tego, czy chcesz:
- utrzymaj status w 2 miejscach
- zachowaj historię stanu
- ...
W obecnej postaci zachowujesz historię statusu. Jeśli chcesz również najnowszego statusu w tabeli nadrzędnej (co jest denormalizacją), potrzebujesz wyzwalacza, aby utrzymać „status” w rodzicu. lub upuść tę tabelę historii stanu.