【问题标题】:Create End_Date column from Start_Date从 Start_Date 创建 End_Date 列
【发布时间】:2021-09-27 11:25:30
【问题描述】:

我有一个带有 Start_Date 的表和一个列,并且有重复。我可以使用什么查询来创建一个新列,该列表示开始日期之后和最接近的日期。示例输入:

Start_Date
2021-03-01
2021-03-01
2021-03-01
2021-08-28
2021-08-28
2021-05-13

示例输出:

Start_Date End_Date
2021-03-01 2021-05-13
2021-03-01 2021-05-13
2021-03-01 2021-05-13
2021-08-28 Null
2021-08-28 Null
2021-05-13 2021-08-28

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    这样的事情可能会起作用:

    SELECT t1.start_date,
    (SELECT MIN(t2.start_date) end_date
     FROM table1 t2
     WHERE t2.start_date > t1.start_date)
    FROM table1 t1
    

    【讨论】:

      【解决方案2】:

      更有效的方法可能是使用聚合和窗口函数:

      select t.start_date, tt.end_date
      from t join
           (select t.start_date, lead(t.start_date) over (order by t.start_date) as end_date
            from t
            group by t.start_date
           ) tt
           on tt.start_date = t.start_date;
      

      我有点不清楚为什么原始表中有重复项。

      【讨论】:

        猜你喜欢
        • 2021-06-15
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        • 2014-10-14
        相关资源
        最近更新 更多