【发布时间】:2018-03-09 23:56:39
【问题描述】:
我有这种格式的数据:
ID| DATE
--------
1 | 02/23/2014
1 | 05/15/2011
1 | 01/05/2017
2 | 12/21/2013
3 | 10/10/2016
3 | 09/05/2015
对于每个 ID 组,我想更新从昨天开始的日期(递减顺序)。 考虑到今天的日期是 09/28/2017,输出应该是这样的:
ID | DATE
--------
1 | 09/27/2017
1 | 09/26/2017
1 | 09/25/2017
2 | 09/27/2017
3 | 09/27/2016
3 | 09/26/2017
我的方法是(这是行不通的)
UPDATE TABLE
SET DATE = CURRENT DATE - p.a days
FROM (
SELECT DATE
,ID
,ROW_NUMBER() OVER (
PARTITION BY ID ORDER BY ID ASC
) a
FROM TABLE
) p
WHERE DATE = p.DATE
AND ID = p.ID
WITH ur;
请提出任何方法来达到同样的效果。
编辑:
数据库:DB2
错误:
错误 [42601] [IBM][DB2/AIX64] SQL0104N 在“租用日期 - p.a 天”之后发现了意外的标记“来自”。预期的标记可能包括:“”。
Date列数据类型:日期
【问题讨论】:
-
您使用的是哪个 dbms? (该查询尝试是特定于产品的。)
-
列日期的数据类型?
-
您遇到了哪个错误?
-
按分区下的列排序对结果没有影响。如果优化器删除该子句,我不会感到惊讶。你的意思是
'DATE'?但是,如果这些是您仅有的两列,则排序无关紧要(因为数据已被覆盖)。 -
你解决了吗?你找到有用的答案了吗?