Netezza 从下一条记录中选取值

Netezza pick value from next record

我有一个像这样的 Netezza table:

ID     START_DATE
1      01-Jan-2000
1      31-Jan-2000
2      01-Jan-2000
2      15-Jan-2000
2      31-Jan-2000

我想通过从同一 ID 的下一条记录中选取日期来创建列 END_DATE。对于 ID 的 'last' 记录,我想输入 '31DEC9999'

ID     START_DATE     END_DATE
1      01-Jan-2000     31-Jan-2000  
1      31-Jan-2000     31-DEC-9999
2      01-Jan-2000     15-Jan-2000
2      15-Jan-2000     31-Jan-2000
2      31-Jan-2000     31-DEC-9999

如何在 Netezza 中执行此操作 SQL?

Netezza 支持 lead() 分析函数。所以:

select t.*,
       lead(start_date) over (partition by id order by start_date) as end_date
from t;

如果你真的想要一个神秘的日期而不是 NULL,你可以使用 coalesce():

select t.*,
       coalesce(lead(start_date) over (partition by id order by start_date),
                date '9999-DEC-31') as end_date
from t;

编辑:

正如 Scott 在评论中所建议的那样,coalesce() 不是必需的:

select t.*,
       lead(start_date, 1, date '9999-DEC-31'
           ) over (partition by id order by start_date) as end_date
from t;