与最大日期分区的日期差异 SQL Teradata

Date Diff from the max date partition by value SQL Teradata

请提供以下数据,我需要计算每个 ID 的 Currunt_date 和最大日期之间的日期差异,日期差异的结果将位于最大日期和其他记录 return NULL。我问它是否可以用 window 函数处理,如果可用而不加入最大值,因为真正的查询非常复杂并且获得数百万行的非常庞大的数据量,我需要优化它以增强查询性能

|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     |

我会在这里使用 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;