Oracle 中lag() 和 lead() 的应用

来源:互联网 发布:java mahout 编辑:程序博客网 时间:2024/05/16 06:35

            今天闲来无事,看了看网上的一些oracle面试题,其中有道题中有用到lag()和lead(),初次见这两个函数,于是经过小小的了解,并作此记录如下:

             这两个函数是偏移量函数,其分别可以查出同一个字段的上一个值和下一个值,并可以作为新的列存在表中。

             1. 首先创建了一张test1表,其中包括month(月份),person(人员),income(收入)这三个字段。

              2.添加如下图所示的测试数据信息:

              

             3. lag()函数的应用: select month,person,income,lag(income)over(order by month) pre_income from test1 查询结果如下图所示:

               

               其中lag(expression,<offset>,<default>)和lead(expression,<offset>,<default>)函数当上一个或下一个值不存在时,可以设置默认值,如下图所示:

               

                4. lead()函数的应用:select month,person,income,lead(income)over(order by month) next_income from test1 查询结果如下图所示:
                   
                   
                     看到这些查询结果,想到了很多报表中的应用,非常方便实用。
                5. 对于制定月份的上月收入,当月收入,下月收入,实用如下结果:
                   
                    将其中的decode()中的第二个参数修改成指定月份就可以。
                 6. lag()函数和lead()函数分组的使用如下图: