lead 函数和 lag函数

这两个函数的作用只能通过例子来解释,否则说不明白。

首先创建一个表

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

 

 

 

 

 

 

 

 

posted on 2013-11-21 14:17  kramer  阅读(811)  评论(0编辑  收藏  举报

导航