Sql Netezza从下一条记录中选取值
我有一张像这样的Netezza桌子:Sql Netezza从下一条记录中选取值,sql,netezza,Sql,Netezza,我有一张像这样的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的“last”记录,我想输入“31DEC9999” ID START_DATE END_DATE 1 01-Jan-2000
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;
如果您确实想要一个神秘的日期而不是空日期,您可以使用coalesce:
编辑:
正如Scott在一篇评论中所指出的,联合是没有必要的:
select t.*,
lead(start_date, 1, date '9999-DEC-31'
) over (partition by id order by start_date) as end_date
from t;
Netezza支持lead分析功能。因此:
select t.*,
lead(start_date) over (partition by id order by start_date) as end_date
from t;
如果您确实想要一个神秘的日期而不是空日期,您可以使用coalesce:
编辑:
正如Scott在一篇评论中所指出的,联合是没有必要的:
select t.*,
lead(start_date, 1, date '9999-DEC-31'
) over (partition by id order by start_date) as end_date
from t;
多么优雅的解决方案!感谢您Netezza还支持滞后/超前的偏移和默认值,因此您可以使用超前开始日期0,'9999-DEC-31'超过。。。如果您不想对越界情况使用合并。@ScottMcG。这是一个很好的建议。滞后/超前的第三个论点是ANSI标准,我经常忘记它。多么优雅的解决方案!感谢您Netezza还支持滞后/超前的偏移和默认值,因此您可以使用超前开始日期0,'9999-DEC-31'超过。。。如果您不想对越界情况使用合并。@ScottMcG。这是一个很好的建议。滞后/超前的第三个论点是ANSI标准,我经常忘记它。