这两个函数的作用只能通过例子来解释,否则说不明白。
首先创建一个表
SQL> create table test (id number, name varchar2(8), val number);
然后插入一些数据
SQL> select * from test;
ID NAME VAL
---------- ------------------------ ----------
1 a 11
2 b 12
3 c 13
4 d 14
1 a 15
2 b 16
2 b 17
下面看lead函数。
SQL> select t.id,t.name,t.val ,lead(t.val,1,88) over(partition by t.id order by t.val) as val2 from test t;
ID NAME VAL VAL2
---------- ------------------------ ---------- ----------
1 a 11 15
1 a 15 88
2 b 12 16
2 b 16 17
2 b 17 88
3 c 13 88
4 d 14 88
首先看 lead函数的 over部分。 我们先忽略第四列。
partion by t.id是说把数据按照 t.id 分组
order by t.val 是说把分组后的数据按照 t.val 排序
这时候我们就得到了前三列组成的结果集。而第四列由 lead(t.val , 1 , 88)组成
t.val 是说第四列从t.val 生成
1 是说采取本组当前val的下一个。比如 第一行 t.id=1这组的val是11,下一个是15. 那么这里就是15。
88 是说如果本组当前下一个val不存在。比如第二行 t.id=1它是 这组的最后一列,所以下一个不存在,就用88代替。
而lag函数正好相反。
SQL> select t.id,t.name,t.val ,lag(t.val,1,88) over(partition by t.id order by t.val) as val2 from test t;
ID NAME VAL VAL2
---------- ------------------------ ---------- ----------
1 a 11 88
1 a 15 11
2 b 12 88
2 b 16 12
2 b 17 16
3 c 13 88
4 d 14 88