私はSQLとデータベース構造が比較的新しく、これに関する最善の方法について質問しています。SQL:ヒストリテーブルをクエリして特定の日付のスナップショットの概要を作成する方法
特定の日付のスナップショットに変換する必要があるオブジェクトの履歴変更データがあります。データの
例:
ID Value UpdateDate
1 4 2017-01-01
2 4 2017-01-03
3 4 2017-01-03
1 7 2017-01-04
2 5 2017-01-08
3 5 2017-01-10
2 8 2017-01-11
私は、任意の日にすべてのオブジェクトの完全な概要のスナップショットを作成できるようにしたいです。例:
Current Date: 2017-01-01 | Current Date: 2017-01-04
ID Value LastUpdateDate | ID Value LastUpdateDate
|
1 4 2017-01-01 | 1 7 2017-01-04
| 2 4 2017-01-03
| 3 4 2017-01-03
__________________________________________________________________________________
|
Current Date: 2017-01-08 | Current Date: 2017-01-12
ID Value LastUpdateDate | ID Value LastUpdateDate
|
1 7 2017-01-04 | 1 7 2017-01-04
2 5 2017-01-08 | 1 8 2017-01-10
3 4 2017-01-03 | 1 5 2017-01-11
次のSQLクエリを作成してこれらのテーブルを作成しました。しかし、これを実行するのに最も効率的な方法であるかどうか疑問に思っていましたか?現実の私のテーブルは、オブジェクトごとに数千の更新(オブジェクトごとではなく、数千の行が毎日履歴テーブルに追加されるので、サイズがかなり大きくなっています。早く)。
SQLクエリ:私はたとえばこれを取得
SELECT * INTO @CurrentOverviewTableName
FROM @HistoryTableName
INNER JOIN (
SELECT ID AS ID_T, MAX(LastUpdateDate) AS LastUpdateDate
FROM @HistoryTableName
WHERE LastUpdateDate <= @OverviewDate
GROUP BY ID
) ts
ON [email protected] = ts.ID_T AND @HistoryTableName.LastUpdateDate = ts.LastUpdateDate_T;
た後:
ID Value LastUpdateDate ID_T LastUpdateDate_T
1 4 2017-01-01 1 2017-01-01
2 4 2017-01-03 2 2017-01-03
3 4 2017-01-03 3 2017-01-03
彼らは重複しているように私は私が必要なものを得るために、最後の2つの列をドロップします。繰り返しますが、これはうまくいきますが、それを行う最良の方法であるかどうか疑問に思っていますか?
私はAzure SQL DBを使用しています。