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;
我有一个像这样的 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;