;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
1日に2つのエントリが予想される場合、これは任意に1つを選択します。 1日の両方のエントリを取得するには、代わりにDENSE_RANKを使用します
正規化されているかどうかは、次のようにするかどうかによって異なります。
- 2か所でステータスを維持する
- ステータス履歴を保持する
- ...
現状では、ステータス履歴を保持します。親テーブルにも最新のステータス(非正規化)が必要な場合は、親の「ステータス」を維持するためのトリガーが必要になります。または、このステータス履歴テーブルを削除してください。