0

複雑な操作 (いくつかのデータベースのマージ) の後、タイムスタンプに基づいて更新する必要があるテーブルがあります。

ジョブテーブル

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

これは可能ですか?(カーソルなどを使用するのではなく、単一のクエリでこの操作を行うことを目指しています..)

ありがとうございました

4

1 に答える 1