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

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章