;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
Ако очаквате 2 записа на ден, тогава това ще избере едно произволно. За да получите и двата записа за един ден, използвайте вместо това DENSE_RANK
Що се отнася до нормализирано или не, зависи дали искате:
- поддържане на статус на 2 места
- запазване на историята на състоянието
- ...
Както е в момента, вие запазвате историята на състоянието. Ако искате и най-новото състояние в родителската таблица (което е денормализация), ще ви е необходим тригер за поддържане на "статус" в родителската таблица. или пуснете тази таблица с историята на състоянието.