求助大神,关于数据填充的问题

[复制链接]
查看11 | 回复3 | 2007-7-4 17:27:50 | 显示全部楼层 |阅读模式
对于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,但是range怎么确定呢?不能用unbounded following,不然在a自己填充的时候会填56的

回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层

代码如下:
select set,

numb,

last_value(data ignore nulls) over(partition by set order by numb desc) data
from t
order set, numb;

回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
用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>
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
select nvl(data, lead(data) over(partition by set order by numb))
from t ;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行