;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
Om du förväntar dig 2 inlägg per dag, kommer detta godtyckligt att välja en. För att få båda bidragen för en dag, använd DENSE_RANK istället
När det gäller normaliserad eller inte, det beror på om du vill:
- upprätthålla status på två ställen
- bevara statushistorik
- ...
Som det ser ut bevarar du statushistorik. Om du också vill ha den senaste statusen i den överordnade tabellen (vilket är denormalisering) skulle du behöva en trigger för att behålla "status" i föräldern. eller släpp den här statushistoriktabellen.