我有一个像这样的Netezza表:
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的“最后”记录,我想把'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中执行此操作?
答案 0 :(得分:4)
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;
编辑:
斯科特在评论中建议,coalesce()
不是必需的:
select t.*,
lead(start_date, 1, date '9999-DEC-31'
) over (partition by id order by start_date) as end_date
from t;