这两个函数的作用只能通过例子来解释,否则说不明白。
首先创建一个表
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