对于null的数据(data),选择在同一集合(set)中,离它最近的下一个有效数据
数据是这样的:
setnumb data
a 1
a 255
a 356
b 134
b 234
b 334
c 120
c 2
c 322
填充后是这样的:
setnumb data
a 155------填充数据,a自己种离它最近的下一个数据,即55,不是56
a 255
a 356
b 134
b 234
b 334
c 120
c 222------填充数据
c 322
用last_value函数就可以搞定,呵呵。。正如这位版主老师所写。
SQL> desc t
名称
是否为空? 类型
----------------------------------------- -------- ----------------------------
SETS
VARCHAR2(2)
NUMB
NUMBER
DATA
VARCHAR2(10)
SQL> select *
2from t
3/
SETS NUMB DATA
---- ---------- --------------------
a
1
a
2 55
a
3 56
b
1 34
b
2 34
b
3 34
c
1 20
c
2
c
3 22
已选择9行。
SQL> select sets,numb,
2 last_value(data ignore nulls) over(partition by sets order by numb desc) data
3from t
4order by sets, numb
5/
SETS NUMB DATA
---- ---------- --------------------
a
1 55
a
2 55
a
3 56
b
1 34
b
2 34
b
3 34
c
1 20
c
2 22
c
3 22
已选择9行。
SQL> merge into t
2using (select sets,numb,
3
last_value(data ignore nulls) over(partition by sets order by numb desc) data
4 from t) x on (t.sets = x.sets and t.numb = x.numb)
5when matched then
6update set data = x.data
7/
9 行已合并。
SQL> select *
2from t
3/
SETS NUMB DATA
---- ---------- --------------------
a
1 55
a
2 55
a
3 56
b
1 34
b
2 34
b
3 34
c
1 20
c
2 22
c
3 22
已选择9行。
SQL>