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)