LAG 是取前N行的数据
LEAD是取后去N行数据
语法:
LAG(exp_str,offset,defval)over()
LEAD(exp_str,offset,defval)over()
--exp_str 要取的列
--offset 取偏移后的第几行数据
--defval 没有符合条件的默认值
eg.
droptable tabA;
createtable tabA(colA number);
insertinto tabA values(1);
insertinto tabA values(2);
insertinto tabA values(4);
insertinto tabA values(8);
insertinto tabA values(16);
insertinto tabA values(32);
insertinto tabA values(64);
select
colA c1,
lag(colA,1,0)over(orderbyrownum) c2,
lag(colA,2,99)over(orderbyrownum) c3, ---99位默认值
lead(colA,1,0)over(orderbyrownum) c4, ---Lead是向下偏移的意思
colA-lag(colA,1,0)over(orderbyrownum) c5
from tabA;
C1 C2 C3 C4 C5
1 1 0 99 2 1
2 2 1 99 4 1
3 4 2 1 8 2
4 8 4 2 16 4
5 16 8 4 32 8
6 32 16 8 64 16
7 64 32 16 0 32
select
colA c1,
lag(colA,1,0)over(orderbyrownum) c2,
lag(colA,2,99)over(orderbyrownum) c3,
lead(colA,1,0)over(orderbyrownumdesc) c4, ----------如果此处有desc,则以这个为倒序的顺序,
colA-lag(colA,1,0)over(orderbyrownum) c5
from tabA;
C1 C2 C3 C4 C5
1 64 32 16 32 32
2 32 16 8 16 16
3 16 8 4 8 8
4 8 4 2 4 4
5 4 2 1 2 2
6 2 1 99 1 1
7 1 0 99 0 1