Sql 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

我有一张像这样的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     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标准,我经常忘记它。