DB2-基于时间戳的更新增量

DB2-基于时间戳的更新增量,db2,timestamp,sql-update,increment,Db2,Timestamp,Sql Update,Increment,在一个复杂的操作(一些数据库合并)之后,我有一个表需要根据时间戳进行更新 工作稳定 Id Time_stamp Resource RunNumber 121 1 A 1 122 2 A 1 123 3 B 1 124 4 B 1 125 5 A

在一个复杂的操作(一些数据库合并)之后,我有一个表需要根据时间戳进行更新

工作稳定

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 update不支持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 = ?
错误:

不允许将空值赋值给非空列“TBSPACEID=6,TABLEID=16,COLNO=2”。。SQLCODE=-407,SQLSTATE=23502,DRIVER=3.64.82 SQL代码:-407,SQL状态:23502

这可能吗?(我的目标是在单个查询中执行此操作,而不是使用游标等)


谢谢

首先,您的子选择有一个语法错误,它告诉我这不是您试图运行的确切语句。错误消息非常清楚——在实际语句中,subselect有时返回NULL

其次,您可能应该按资源对分区内的行进行编号

第三,不管怎样,您可能只需要一个子选择——这是基于您发布的声明:

update JOBSTABLE JT
SET RunNumber = 
(SELECT ROW_NUMBER() OVER (partition by resource ORDER BY TIME_STAMP ) 
 from JobsTable where id = JT.ID)