複雑な操作 (いくつかのデータベースのマージ) の後、タイムスタンプに基づいて更新する必要があるテーブルがあります。
ジョブテーブル
Id Time_stamp Resource RunNumber
121 1 A 1
122 2 A 1
123 3 B 1
124 4 B 1
125 5 A 2
ポイントは、タイムスタンプに基づいて各リソースの RunNumber 列を段階的に更新することです。したがって、最終的に期待される結果は次のとおりです。
Id Time_stamp Resource RunNumber
121 1 A 1
122 2 A 2 //changed
123 3 B 1
124 4 B 2 //changed
125 5 A 3 //changed
これを複数の方法で実行してみました。DB2 の更新は Join または With ステートメントをサポートしていないため、次のようなことを試しました。
update JOBSTABLE JT
SET RunNumber =
(SELECT RunNumber
FROM (Select ID, ROW_NUMBER() OVER (ORDER BY TIME_STAMP ) RunNumber from JobsTable, ORDER BY TIME_STAMP) AS AAA
WHERE AAA.ID = JT.ID)
WHERE ID = ?
エラー:
NOT NULL 列 "TBSPACEID=6、TABLEID=16、COLNO=2" への NULL 値の割り当ては許可されていません.. SQLCODE=-407、SQLSTATE=23502、DRIVER=3.64.82 SQL コード: -407、SQL 状態: 23502
これは可能ですか?(カーソルなどを使用するのではなく、単一のクエリでこの操作を行うことを目指しています..)
ありがとうございました