oracle lag與lead分析函式簡介
轉:http://blog.chinaunix.net/uid-411974-id-121875.html
lag與lead函式是跟偏移量相關的兩個分析函式,透過這兩個函式我們可以取到當前行列的偏移N行列的值 lag可以看著是正的向上的偏移 lead可以認為負的向下的偏移 具體我們來看幾個例子:
lag與lead函式是跟偏移量相關的兩個分析函式,透過這兩個函式我們可以取到當前行列的偏移N行列的值 lag可以看著是正的向上的偏移 lead可以認為負的向下的偏移 具體我們來看幾個例子:
我們先看下scott的emp表的兩列資料:
select deptno, sal from scott.emp order by deptno
DEPTNO SAL
10 2450.00
10 5000.00
10 1300.00
20 2975.00
20 3000.00
20 1100.00
20 800.00
20 3000.00
30 1250.00
30 1500.00
30 1600.00
30 950.00
30 2850.00
30 1250.00
ok那現在比方我有個這樣的需求(我們只看sal列)我想問你2450的上一個值是多少?回答是沒有 那5000的上一個值是多少?是:2450 1300的上一個值是多少呢?是:5000 Ok以此類推我想得到當前值的上一個值
就像:2450 xxx(xxx代表空)--這個值是前一列的上一個值
5000.00 2450
1300.00 5000
2975.00 1300
3000.00 2975
1100.00 3000
... ...
1250.00 2850
OK就這樣的需求 那我們現在用SQL應該如何寫呢?是的你猜對了就是用lag分析函式:
select deptno, sal a, lag(sal, 1, sal) over(order by deptno) b
from scott.emp
DEPTNO A B
10 2450.00 2450 --ps:這裡的之所以是2450是因為lag(sal, 1, sal)我讓它給了他本身的值
10 5000.00 2450
10 1300.00 5000
20 2975.00 1300
20 3000.00 2975
20 1100.00 3000
20 800.00 1100
20 3000.00 800
30 1250.00 3000
30 1500.00 1250
30 1600.00 1500
30 950.00 1600
30 2850.00 950
30 1250.00 2850
是的就這麼簡單你看出A列與B列之間有何聯絡了吧 相對A列B列是她的上一個值
關於lead她就剛好與lag相反了
select deptno, sal a, lead(sal, 1, sal) over(order by deptno) b
from scott.emp
DEPTNO A B
10 2450.00 5000
10 5000.00 1300
10 1300.00 2975
20 2975.00 3000
20 3000.00 1100
20 1100.00 800
20 800.00 3000
20 3000.00 1250
30 1250.00 1500
30 1500.00 1600
30 1600.00 950
30 950.00 2850
30 2850.00 1250
30 1250.00 1250
相對A列B列是她的下一個值
另外那個偏移值1是可以隨便取的如果是2那就是偏移兩個值了
select deptno, sal a, lag(sal, 2,null) over(order by deptno) b
from scott.emp
DEPTNO A B
10 2450.00 --注意這裡是null空了
10 5000.00
10 1300.00 2450 --A列1300的上兩個值是多少?2450是吧
20 2975.00 5000
20 3000.00 1300
20 1100.00 2975
20 800.00 3000
20 3000.00 1100
30 1250.00 800
30 1500.00 3000
30 1600.00 1250
30 950.00 1500
30 2850.00 1600
30 1250.00 950
OK 那其實lag,lead還可以加上分組偏移的
select deptno,
sal a,
lag(sal, 1, null) over(partition by deptno order by deptno) b
from scott.emp
DEPTNO A B
10 2450.00
10 5000.00 2450
10 1300.00 5000
20 2975.00
20 3000.00 2975
20 1100.00 3000
20 800.00 1100
20 3000.00 800
30 1250.00
30 1500.00 1250
30 1600.00 1500
30 950.00 1600
30 2850.00 950
30 1250.00 2850
注意deptno不同的分組間的臨界值你看明白了吧
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2055624/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- oracle之函式LAG,LEADOracle函式
- oracle函式之lag和leadOracle函式
- oracle中lead和lag函式Oracle函式
- lead和lag函式函式
- lag和lead函式函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- Oracle分析函式之LEAD和LAG實際應用Oracle函式
- [Oracle]高效的SQL語句之分析函式(四)--lag()/lead()OracleSQL函式
- Hive 分析函式lead、lag例項應用Hive函式
- mysql實現oracle的lead和lag函式功能MySqlOracle函式
- 使用LAG和LEAD函式統計函式
- 分析函式 - LAG函式
- oracle中LAG()和LEAD()等分析統計函式的用法(統計月增長率)Oracle函式
- lead lag rank()over()dense_rank()row_number()over()rollupcube幾大分析函式函式
- ORACLE函式介紹第五篇 分析函式簡述Oracle函式
- Oracle分析函式與視窗函式Oracle函式
- Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法(轉)Oracle函式
- Oracle中CAST函式使用簡介OracleAST函式
- Oracle 分析函式使用介紹(轉)Oracle函式
- ORACLE函式介紹第六篇 著名函式之分析函式Oracle函式
- 關於lag函式的用法函式
- 函式式 JavaScript 簡介函式JavaScript
- 函式式API簡介函式API
- 【SQL】Lag/Rank/Over視窗函式揭秘,資料分析之旅SQL函式
- php 函式簡介PHP函式
- ORACLE函式介紹第七篇 非著名函式之分析函式Oracle函式
- Oracle分析函式七——分析函式案例Oracle函式
- Oracle聚合函式/分析函式Oracle函式
- Oracle 分析函式Oracle函式
- Oracle分析函式Oracle函式
- ORACLE函式介紹Oracle函式
- 10-函式-1-函式簡介函式
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- match函式簡單介紹以及與index函式結合應用函式Index
- (譯) 函式式 JS #1:簡介函式JS
- 函式表示式和函式宣告簡單介紹函式
- 【函式】Oracle TRIM函式語法介紹函式Oracle