【问题标题】:Date Diff from the max date partition by value SQL Teradata按值 SQL Teradata 与最大日期分区的日期差异
【发布时间】:2021-07-24 22:00:50
【问题描述】:

请我有以下数据,我需要计算每个 ID 的 Currunt_date 和最大日期之间的日期差异,日期差异的结果将位于最大日期旁边,其他记录返回 NULL。我问是否可以在不加入最大值的情况下使用窗口函数来处理它,因为真正的查询非常复杂并且会获得数百万行的大量数据,我需要对其进行优化以提高查询性能

|ID  |Date  |
|----+------|
|A   |1-Apr |
|A   |15-Apr|
|B   |1-Mar |
|B   |15-Mar|
|C   |1-Jan |
|C   |15-Jan|

我尝试使用以下查询,但结果与每个日期重复

SELECT ID, DATE, Current_date - Max(Date) over (Partition BY ID ORDER BY DATE DESC) AS DURATION
FROM TBL

但我需要结果如下所示

|ID  |Date  |Duration|
|----+------+--------|
|A   |1-Apr |NULL    |
|A   |15-Apr|17      |
|B   |1-Mar |NULL    |
|B   |15-Mar|48      |
|C   |1-Jan |NULL    |
|C   |15-Jan|107     |

【问题讨论】:

    标签: sql teradata window-functions


    【解决方案1】:

    我会在这里使用MAX 作为分析函数来识别每个ID 具有最大日期的记录:

    SELECT
        ID,
        Date,
        CASE WHEN Date = MAX(Date) OVER (PARTITION BY ID)
             THEN CURRENT_DATE - MAX(Date) OVER (PARTITION BY ID) END AS Duration
    FROM cte
    ORDER BY ID, Date;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多