提问人:Nairda123 提问时间:9/19/2023 最后编辑:Nairda123 更新时间:9/19/2023 访问量:36
CASE WHEN 更改重复值
CASE WHEN for changing duplicate value
问:
我正在尝试添加一个 case when 语句,如果每两列有重复项,该语句会将 +1day 添加到记录的日期列中。
这将是原始表:
一个 | B | C |
---|---|---|
红 | 桌子 | 2023-01-01 |
红 | 桌子 | 2023-01-01 |
这将是结果:
一个 | B | C |
---|---|---|
红 | 桌子 | 2023-01-01 |
红 | 桌子 | 2023-01-02 |
我知道使用 DATEADD 足以更新日期,但无法理解如何抓取重复字段并在列选择期间的 case when 语句中只更新其中一个字段。select DATEADD( 'day',1,'2023-09-13')::date;
编辑:如果A列和B列相同,我希望第二列记录C更新为+1天。
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY a,b > 1)
THEN DATEADD('day', 1, a)
ELSE a
END AS c
例如,像这样的东西会更新两行。
任何帮助都表示赞赏。
答:
1赞
Tim Biegeleisen
9/19/2023
#1
你走在正确的轨道上。您应该使用减 1 的结果作为添加到日期的天数: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;
为了解决您的后续问题,您只想在某一列与特定值不匹配时增加日期,您可以使用:D
DATEADD(
'day',
COUNT(CASE WHEN D != 123 THEN 1 END) OVER (PARTITION BY A, B ORDER BY C) - 1,
C)
评论
0赞
Nairda123
9/19/2023
这正是我正在寻找的,谢谢!有没有办法对加法列强制检查,比如说可以确保这些记录的 D 列 != D?
0赞
Tim Biegeleisen
9/19/2023
是的,在 之后添加一个子句,例如WHERE
FROM
WHERE D != <some value>
0赞
Nairda123
9/19/2023
案例陈述内部呢?要仍然包含这些行,但如果重复的 D 列不匹配,则仅更新。
上一个:字典有时具有多个键
下一个:如何将输入转换为随机类型?蟒
评论