我正在尝试添加一个 case when 语句,如果每两列有重复项,该语句会将 +1day 添加到记录的日期列中。
这将是原始表格:
A | B | C |
---|---|---|
红色 | 桌子 | 2023-01-01 |
红色 | 桌子 | 2023-01-01 |
这将是结果:
A | B | C |
---|---|---|
红色 | 桌子 | 2023-01-01 |
红色 | 桌子 | 2023-01-02 |
我知道使用 DATEADD 足以更新日期
select DATEADD( 'day',1,'2023-09-13')::date;
但无法理解如何获取重复字段并在列选择期间仅更新 case when 语句中的其中一个字段。
编辑:如果 A 列和 B 列相同,我希望第二条记录 C 列更新 +1 天。
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY a,b > 1)
THEN DATEADD('day', 1, a)
ELSE a
END AS c
例如,这样的事情会更新两行。
任何帮助表示赞赏。
你走在正确的道路上。您应该使用
ROW_NUMBER
的结果减一作为添加到日期的天数:
SELECT *, DATEADD(
'day',
ROW_NUMBER() OVER (PARTITION BY A, B ORDER BY C) - 1,
C) AS new_date
FROM yourTable
ORDER BY 1, 2, 3;