Oracle SQL找出上/下一筆某個欄位值來計算

有時候希望以上/下一筆的某個欄位值來計算,例如想知道今天與昨天交易量的差異數時,
通常是以編寫PL/SQL來達成目的。
但是今天在網路上看到原來有lead()和lag()兩個function可以直接以SQL完成。

例如:

SQL> select * from tmp_ccc

a      b    
------ -----
1      0  
2      10
3      30
4      40

lag() function:找出上一筆的資料
SQL> select a, lag(b) over (order by b) test from test_ccc;

a      test    
------ -----
1        
2      0
3      10
4      30

lead() function:找出下一筆資料
SQL> select a, lead(b) over (order by b) test from test_ccc;

a      test    
------ -----
1      10  
2      30
3      40
4