与最大日期分区的日期差异 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;
请提供以下数据,我需要计算每个 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;