-1
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を使用すると仮定して、パラメータセットを1つのテーブルに保存します。 I(PID、ST)にINSERT I(PID int型、ST int型) テーブルを作成する上記の結果をかなえる方法1,20160131 を選択 ?あなただけの一時テーブル(SQL Serverの構文に相当)を作成するために探しているならnetezza sql、どうやって実現する?