Oracle LAG 和 LEAD 函数

LAG 是取前N行的数据

LEAD是取后去N行数据

 

语法:

    LAG(exp_str,offset,defval)over()

    LEAD(exp_str,offset,defval)over()

    --exp_str 要取的列

    --offset 取偏移后的第几行数据

    --defval 没有符合条件的默认值

    eg.

droptable tabA;

扫描二维码关注公众号,回复: 1147216 查看本文章

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

 

 

 

 

猜你喜欢

转载自sanpic.iteye.com/blog/2186720