現在、バイテンポラル テーブルを更新する更新ステートメントを作成しています。次のことを行います。
すべての ID のすべての行を更新し、RELATION_ID を最新の行の RELATION_ID に設定します。
このクエリには、繰り返しサブクエリがあります (更新に使用する値を取得するために最初に使用するため)、また (この RELATION_ID を既に持っている行を更新したくない)
最初のクエリまたは代替手段からの値を再利用する方法はありますか? (プログラミングなしで、純粋な SQL が必要です)
UPDATE TBL_CLIENT UPD
SET RELATION_ID = (
SELECT RELATION_ID FROM TBL_CLIENT SUBQ
WHERE UPD.ID = SUBQ.ID AND
UPDATE_TIMESTAMP = (
SELECT MAX(UPDATE_TIMESTAMP) FROM TBL_CLIENT SUBSQ
WHERE SUBSQ.ID = SUBQ.ID
)
)
WHERE ID IN (
SELECT ID
FROM TBL_CLIENT QU
GROUP BY ID
HAVING COUNT(DISTINCT(RELATION_ID)) > 1
) AND
RELATION_ID <> (
SELECT RELATION_ID FROM TBL_CLIENT SUBQ2
WHERE UPD.ID = SUBQ2.ID AND
UPDATE_TIMESTAMP = (
-- Update mit STID des neusten Eintrages
SELECT MAX(UPDATE_TIMESTAMP) FROM TBL_CLIENT SUBSQ2
WHERE SUBSQ2.ID = SUBQ2.ID
)
)
例:
ID / RELATION_ID / UPDATE_TIMESTAMP
- 1 / 10 / 1.1.2000
- 1 / 12 / 5.1.2002
- 2008.3.1 / 15 / 28
更新後:
- 1 / 15 / 1.1.2000
- 1 / 15 / 5.1.2002
- 2008.3.1 / 15 / 28
最後の行は最新の行であったため、リレーション ID が取得されました (行自体は更新されませんでした!ここに含まれていないクエリの他の部分にとって重要です)。
推奨事項をありがとう