lead和lag是偏移量函数,可以查出同一个字段上一个值和下一个值,在新列中显示,需要结合开窗函数进行显示
数据准备:
create table test
(test_id varchar2(10),
test_name varchar2(10),
test_value number);
insert into test values('1','aaa',10);
insert into test values('1','bbb',20);
insert into test values('1','ccc',30);
insert into test values('2','ddd',40);
insert into test values('2','eee',50);
insert into test values('3','fff',60);
commit;
lead函数:
select test_id,test_name,test_value,
lead(test_value,1,null)over(partition by test_id order by test_value) test_value_next
from test;
TEST_ID
TEST_NAME
TEST_VALUE
TEST_VALUE_NEXT
1
aaa
10
20
1
bbb
20
30
1
ccc
30
2
ddd
40
50
2
eee
50
3
fff
60
select test_id,test_name,test_value,
lead(test_value,2,null)over(partition by test_id order by test_value) test_value_next
from test;
TEST_ID
TEST_NAME
TEST_VALUE
TEST_VALUE_NEXT
1
aaa
10
30
1
bbb
20
1
ccc
30
2
ddd
40
2
eee
50
3
fff
60
select test_id,test_name,test_value,
lead(test_value,2,null)over(order by test_value) test_value_next
from test;
TEST_ID
TEST_NAME
TEST_VALUE
TEST_VALUE_NEXT
1
aaa
10
30
1
bbb
20
40
1
ccc
30
50
2
ddd
40
60
2
eee
50
3
fff
60
lag函数正好相反:
select test_id,test_name,test_value,
lag(test_value)over(order by test_value) test_value_before
from test;
TEST_ID
TEST_NAME
TEST_VALUE
TEST_VALUE_BEFORE
1
aaa
10
1
bbb
20
10
1
ccc
30
20
2
ddd
40
30
2
eee
50
40
3
fff
60
50
select test_id,test_name,test_value,
lag(test_value)over(order by test_id desc) test_value_before
from test;
TEST_ID
TEST_NAME
TEST_VALUE
TEST_VALUE_BEFORE
3
fff
60
2
eee
50
60
2
ddd
40
50
1
bbb
20
40
1
aaa
10
20
1
ccc
30
10
[@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/41451/viewspace-1058385/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/41451/viewspace-1058385/