我正在try 添加一个Case When语句,如果每两列有重复项,该语句会将+1day添加到记录的日期列中.

这将是原始表:

A B C
Red Table 2023-01-01
Red Table 2023-01-01

这将是一个结果:

A B C
Red Table 2023-01-01
Red Table 2023-01-02

我知道使用DATEADD就足以更新日期 select DATEADD( 'day',1,'2023-09-13')::date;,但无法理解如何获取重复的字段,并且在列 Select 过程中只更新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减1的结果作为要添加到日期的天数:

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)

Sql相关问答推荐

使用自动增量ID插入失败(无法将值空插入列ID)

如何从上一个值减go 值

如何将资源密集型自连接转换为更快的查询?

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

PostgreSQL中的合并命令是原子的,还是需要一些类似于SQL Server版本的内容?

PostgreSQL基于2个COLS的任意组合 Select 唯一行

SQL Select 最小优先级

不同表达方式时的大小写

从列中提取子字符串的ORDER BY CASE语句

我需要一个regexp_like来只验证字母D或T、数字和管道

如何简化此PostgreSQL查询以计算平均值?

PostgreSQL:查找继承表中的特定记录属于哪个表

如何在多列上编写具有不同条件的查询?

如何在T-SQL中编写row_number的WHERE子句?

按行值出现的顺序对行值进行分组

当 2 列具有静态值并且第 3 列使用运算符 IN 时,对 PostgreSQL 和 3 列上的复杂索引的最佳查询

什么是 100.它与 100 有什么区别?

我们可以使用连接改进包含多个子查询的查询吗

在SQL中实现表格数据透视类型报表

计算 SQL 中的总体成功率:递归 CTE 还是替代方法?