create table p(pid int, st int, v int,hid int,ht varchar(2));
data:
insert into p(pid,st,hid, ht,v )
select 1 ,20160131 ,100 ,'FO' ,10
union select 1 ,20160131 ,101 ,'FO' ,20
union select 1 ,20160131 ,102 ,'FO' ,30
union select 1 ,20160131 ,103 ,'ST' ,40
union select 1 ,20160229 ,104 ,'ST' ,50
union select 207 ,20160229 ,301 ,'ST' ,80
union select 207 ,20160229 ,302 ,'ST' ,20
union select 207 ,20160331 ,303 ,'FO' ,40
union select 102 ,20160229 ,205 ,'ST' ,60
union select 102 ,20160229 ,206 ,'ST' ,20
union select 102 ,20160229 ,207 ,'FO' ,20
union select 100 ,20160131 ,201 ,'ST' ,50
union select 100 ,20160131 ,202 ,'ST' ,50
union select 101 ,20151231 ,203 ,'ST' ,50
union select 101 ,20151231 ,204 ,'ST' ,50
result:
pid v hid ht path pre_st next_st st
1 40 103 ST 1 NULL NULL 20160131
100 50 201 ST 1--->100 NULL NULL 20160131
100 50 202 ST 1--->100 NULL NULL 20160131
101 50 203 ST 1--->101 20151231 NULL 20160131
101 50 204 ST 1--->101 20151231 NULL 20160131
102 20 206 ST 1--->102 NULL 20160229 20160131
102 60 205 ST 1--->102 NULL 20160229 20160131
207 20 302 ST 1--->102--->207 NULL 20160331 20160229
207 80 301 ST 1--->102--->207 NULL 20160331 20160229
303 99 304 ST 1--->102--->207--->303 NULL 20160720 20160331
I can do it in SQLServer first.
select pid,v,hid,ht, path=cast(pid as varchar) ,
(select max(st) from p where pid = a.pid and st < a.st) as pre_st,
(select max(st) from p where pid = a.pid and st > a.st) as next_st,
a.st into #t1
from p a where pid=? and st=?
but netezza cannot support this grammer.
我需要通过pid,st作为参数来完成它。假设我们使用pid = 1和st = 20160131,我将参数集保存在一个表中。 create table i(pid int,st int) 插入i(pid,st) 选择1,20160131 如何实现上述结果?
答案 0 :(得分:0)
如果您只是想创建一个临时表(相当于您的SQL Server语法),那么就是这样:
create temporary table t1 as
select pid,v,hid,ht, path=cast(pid as varchar) ,
(select max(st) from p where pid = a.pid and st < a.st) as pre_st,
(select max(st) from p where pid = a.pid and st > a.st) as next_st,
a.st
from p a where pid=? and st=?
我将假设您拥有?
值,因为您使用的是ODBC参数。如果你想让Netezza提示你做些什么,you can't。