lag分析函数技巧

lag分析函数本身是用来取下一个记录,即错位,可以设置错位的位数,lag分析函数的语法&作用:


lag(t.cur_value, 1)表示把t.cur_value这列错位一行重新生成一列,
lag(t.cur_value, 2)表示错两行,
lag(t.cur_value, 0)表示不错行(完全复制该列生成另外一列),默认错位一行(一般用来查找前一天,前一个月等数据,用来算环比,同比等);


距离如下:

SQL> select * from lyq_test1 order by 1;


        ID NAME
---------- ------------------------------
         1 sagasgh
         1 ljigusdhgiu
         1 siduyg
         2 uygg
         2 iuyjhih
         3 aaa
         3 bbb
         3 ccc

8 rows selected.


运用lag分析函数后:

SQL> select id,name,lag(id) over(order by id) as new_id from lyq_test1 order by 1;

        ID NAME                               NEW_ID
---------- ------------------------------ ----------
         1 sagasgh
         1 ljigusdhgiu                           1
         1 siduyg                                  1
         2 uygg                                     1
         2 iuyjhih                                   2
         3 aaa                                       2
         3 bbb                                       3
         3 ccc                                         3

8 rows selected.

Elapsed: 00:00:00.01


说明:可以看到新的id列的值向后移了一位。


使用lag分析函数实现sqlplus的break功能,具体如下:


SQL> select decode(lag(id) over(order by id) ,id,to_number(null),id) new_id,name from lyq_test1 ;

    NEW_ID NAME
---------- ------------------------------
         1 sagasgh
           ljigusdhgiu
           siduyg
         2 uygg
           iuyjhih
         3 aaa
           bbb
           ccc

8 rows selected.

Elapsed: 00:00:00.01


 


还有一种方法是通过rownum的方法,也挺新奇的。详见itpub连接 源于itpub上的一个帖子:http://www.itpub.net/thread-1356352-1-1.html

 

 

 

 

 

 

 

 

 


版权声明:本文为ningjieshuijing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。