Netezza从下一记录中挑选价值

时间:2016-02-02 21:41:14

标签: 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的“最后”记录,我想把'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中执行此操作?

1 个答案:

答案 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;