更新: 質問は改善されましたが、まだ助けが必要です!
次のテーブル構造があります。
テーブルreports
:
ID | time | title | (extra columns)
1 | 1364762762 | xxx | ...
次の構造を持つ複数object
のテーブル
ID | objectID | time | title | (extra columns)
1 | 1 | 1222222222 | ... | ...
2 | 2 | 1333333333 | ... | ...
3 | 3 | 1444444444 | ... | ...
4 | 1 | 1555555555 | ... | ...
オブジェクト テーブルでは、オブジェクトの更新時に同じ objectID を持つ新しいバージョンが挿入されるため、古いバージョンを引き続き使用できます。たとえば、エントリを参照してくださいobjectID = 1
レポート テーブルでは、report
が挿入されますが、更新/編集されることはありません。
私ができるようにしたいのは次のとおりです。
テーブルのエントリごとに、オブジェクトが作成されたときのように、すべてのreports
オブジェクトの状態を照会できるようにしたいと考えています。report
たとえば、ID 1 の上記のサンプル レポートを見てみましょう。レポートが作成されたとき (time
列を参照)、objectID 1 の現在のバージョンは ID 1 のエントリでした (エントリ ID 4 はその時点では存在しませんでした)。ObjectID 2 は、エントリ ID 2 の現在のバージョンでも存在していました。
これを達成する方法がわかりません。
オブジェクトのバージョンを時間列で選択するクエリを使用できます。
SELECT *
FROM (
SELECT *
FROM objects
WHERE time < [reportTime]
ORDER BY time DESC
)
GROUP BY objectID
このクエリのパフォーマンスについては話さないでください。これは、私が何をしたいのかを明確にするためです。私の問題は、時間列の比較です。システム時間が「何らかの理由で」変更される可能性があり、時間列に間違ったデータが含まれ、間違った結果につながるため、これは正しいオブジェクトバージョンを取得したことを確認する良い方法ではないと思います。
そうする別の方法は何でしょうか?これには時間列を使用しないことを考えましたが、代わりに、データベーステーブル全体の挿入順序を知っているGLOBAL増分値を使用しました。