oracle中LAG()和LEAD()等分析統計函式的用法(統計月增長率)
LAG()和LEAD()統計函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和 LEAD有更高的效率。以下整理的LAG()和LEAD()例子:
LAG(EXPRESSION,
SQL> select year,region,profit ,lag (profit,1) over (order by year) as 51xit_exp from test;
YEAR REGION PROFIT 51xit_exp
---- ------- ---------- -------------
2003 West 88
2003 West 88 88
2003 Central 101 88
2003 Central 100 101
2003 East 102 100
2004 West 77 102
2004 East 103 77
2004 West 89 103
LEAD(EXPRESION,
SQL> select year,region,profit ,lead (profit,1) over (order by year) as next_year_exp from test;
YEAR REGION PROFIT NEXT_YEAR_EXP
---- ------- ---------- -------------
2003 West 88 88
2003 West 88 101
2003 Central 101 100
2003 Central 100 102
2003 East 102 77
2004 West 77 103
2004 East 103 89
2004 West 89
Lag函式為Lag(exp,N,defval),defval是當該函式無值可用的情況下返回的值。Lead函式的用法類似。
Lead和Lag函式也可以使用分組,以下是使用region分組的例子:
SQL> select year,region,profit , lag (profit,1,0) over (PARTITION BY region order by year) as 51xit_exp from test;
YEAR REGION PROFIT 51xit_exp
---- ------- ---------- -------------
2003 Central 101 0
2003 Central 100 101
2003 East 102 0
2004 East 103 102
2003 West 88 0
2003 West 88 88
2004 West 77 88
2004 West 89 77
一SQL問題解答:
問題:
CREATE TABLE ldy_temp_2
(
分局 VARCHAR(255),
派出所 VARCHAR(255) ,
證件型別 VARCHAR(255) ,
證件號碼 VARCHAR(255) ,
姓名 VARCHAR(255) ,
性別 VARCHAR(255) ,
行政區劃 VARCHAR(255) ,
旅館名稱 VARCHAR(255) ,
旅館地址 VARCHAR(255) ,
房間號 VARCHAR(255) ,
入住時間 VARCHAR(255) ,
col012 VARCHAR(255)
);
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1234','ZHANGTAO','A','20100506');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1234','ZHANGTAO','A','20100507');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1234','ZHANGTAO','B','20100508');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1234','ZHANGTAO','A','20100509');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1235','ZZZZ','A','20100506');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1235','ZZZZ','B','20100507');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1235','ZZZZ','A','20100508');
INSERT INTO LDY_TEMP_2
(證件號碼,姓名,旅館名稱,入住時間)
VALUES('1235','ZZZZ','B','20100509');
建表語句和測試資料已經給出 請問 如何查詢相鄰兩次入住旅館名稱不同的人;也就是說 一個人的證件號碼是123的話 那麼這個人的資訊按照入住時間排序後 相鄰兩條資料的旅館名稱不能一樣 。
解答:
with temp_a as
(select
t.證件號碼,
t.旅館名稱,
t.入住時間,
lag(t.旅館名稱) over (partition by t.證件號碼 order by t.入住時間) as lagname
from ldy_temp_2 t)
select 證件號碼,姓名,旅館名稱,入住時間
from ldy_temp_2 a
where a.證件號碼 not in (select b.證件號碼 from temp_a b where b.旅館名稱=b.lagname)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-759829/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用LAG和LEAD函式統計函式
- oracle中lead和lag函式Oracle函式
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- oracle函式之lag和leadOracle函式
- lead和lag函式函式
- lag和lead函式函式
- oracle lag與lead分析函式簡介Oracle函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- oracle之函式LAG,LEADOracle函式
- Oracle分析函式之LEAD和LAG實際應用Oracle函式
- mysql實現oracle的lead和lag函式功能MySqlOracle函式
- [Oracle]高效的SQL語句之分析函式(四)--lag()/lead()OracleSQL函式
- oracle 統計分析函式Oracle函式
- Hive 分析函式lead、lag例項應用Hive函式
- 分析函式——統計函式
- 關於lag函式的用法函式
- 分析函式 - LAG函式
- Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法(轉)Oracle函式
- 分析函式之排名統計函式
- 【筆記】oracle 統計函式筆記Oracle函式
- linux系統程式設計:setjmp和longjmp函式用法Linux程式設計函式
- Oracle統計分析函式集,over(partition by..) 的運用Oracle函式
- lead lag rank()over()dense_rank()row_number()over()rollupcube幾大分析函式函式
- 不使用分析函式的累計統計查詢函式
- Oracle分析函式、多維函式和Model函式簡要說明,主要針對BI報表統計Oracle函式
- ORACLE的統計分析Oracle
- Oracle 中的 ROW_NUMBER() OVER() 分析函式的用法Oracle函式
- Oracle 分組彙總統計函式的使用Oracle函式
- SUMIF、COUNTIF和SUMPRODUCT函式在成績統計中的應用函式
- 在統計學中機率分佈中的機率密度函式PDF,機率質量PMF,累積分佈CD函式
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- 在JS中統計函式執行次數JS函式
- 學習PHP中統計擴充套件函式的使用PHP套件函式
- Oracle中的分析統計validate structure,compute statisticsOracleStruct
- [總結] Oracle表的分析統計Oracle
- Oracle - DBMS_LOB函式和用法Oracle函式
- oracle中函式to_char()的用法介紹Oracle函式
- 【Oracle的NVL函式用法】Oracle函式