1. 程式人生 > >oracle中LAG()和LEAD()等分析統計函式的用法(統計月增長率)

oracle中LAG()和LEAD()等分析統計函式的用法(統計月增長率)

LAG()和LEAD()統計函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和 LEAD有更高的效率。以下整理的LAG()和LEAD()例子:

LAG(EXPRESSION,<OFFSET>,<DEFAULT>)
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,<OFFSET>,<DEFAULT>)
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)


相關推薦

oracleLAG()LEAD()分析統計函式用法(統計增長率)

LAG()和LEAD()統計函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和 LEAD有更高的效率。以下整理的LAG()和LEAD()例子: LAG(EXPRESSION,<OFFSET>

oracle分析函式系列之LAGLEAD:取出同一欄位的前N行的資料後N行的值

Lag和Lead函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和LEAD有更高的效率。以下是LAG和LEAD的例子: SQL> select  year,region,profit ,lag (pr

oracleunionunion all區別與效能分析

[ 概要 ] 經常寫sql的同學可能會用到union和union all這兩個關鍵詞, 可能你知道使用它們可以將兩個查詢的結果集進行合併, 那麼二者有什麼區別呢? 下面我們就簡單的分析下.

Coredump介紹及如何在Android開啟使用來分析Crash問題

文章目錄:Coredump簡介及使用... 1目錄... 2一、什麼是Coredump. 3二、Coredump產生的原因... 3三、如何控制產生Coredump. 4四、使用Coredump的準備... 4五、開始使用Coredump. 5一、什麼是Coredump有些C/C++程式或者通過JNI呼叫了C

關於在mysqloracle編碼對varchar型別的影響

今天在測試oracle的時候發現,我用varchar2(10),的欄位,居然存不下“凱爾特人”四個字元;和我在學習mysql中顯然是不一樣的,查閱資料發現:mysql 5.0 之後 varchar(1)是可以存一個字元,不管是數字、英文字母還是漢字都可以(UTF8,三個位元組

oracle求同比,環比函式 LAGLEAD

CREATE TABLE salaryByMonth (  employeeNo varchar2(20),  yearMonth varchar2(6),  salary number ) ; insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALAR

oraclerownumrow_number()

cnblogs 計算 順序分配 每一個 total tom ins 使用 div row_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函數計算的值就表示每組內部排序後的順序編

Oraclechr()ascii()函數(附:常用字符與ascii對照表)

關鍵字 回車 pps body api adding com eve amp Oracle中chr()和ascii()函數(附:常用字符與ascii對照表) 關鍵字:chr() chr()函數作用:“特殊”字符特殊處理 在PLSql中可查詢相對應的字碼與特殊符 chr()函

ORACLENVLlCOALESCE的區別

oracl 第一個 ssi 必須 如果 不一致 miss 兩個 oal nvl(COMMISSION_PCT,0)如果第一個參數為null,則返回第二個參數如果第一個參數為非null,則返回第一個參數 COALESCE(EXPR1,EXPR2,EXPR3...EXPRn)從

OracleBlobClob

oracl rac clas 存儲 tchar ring jdbc input inpu Blob是指二進制大對象也就是英文Binary Large Object的所寫;Clob是指大字符對象也就是英文Character Large Object的所寫。因此這兩個類型都是用

ORACLESIDSERVICE_NAME的區別

spring 好的 java應用程序 系列 sdn 文件 數據 jdbc 修改 先來講一個小故事,2015年6月份,有個客戶遷移了數據庫,由單實例數據庫變成了RAC。JAVA應用程序出現了無法連接數據庫的情況,但是PL/SQL能連接上數據庫。由於項目比較龐大,

深度學習 GPU 視訊記憶體分析 深度學習 GPU 視訊記憶體分析

轉 深度學習中 GPU 和視訊記憶體分析 2017年12月21日 14:05:01 lien0906 閱讀數:5941 更多

Oracleinstrsubstr 的應用

instr函式 instr函式用於從指定的位置開始,從某物件中查詢第N個與模式匹配的字串。 例項:   SELECT instr(‘syranmo’,’s’) FROM dual; – 返回 1   SELECT instr(‘syranmo’,’ra’) FROM dual; –

ORACLEdatetimestamp的相互轉化

原文章地址:https://blog.csdn.net/chenlong331409178/article/details/47441025 oracle 中date型別精確可以年月日,時分秒,timestamp型別可以精確的秒一下 data轉為timstamp data 轉為timstam可

oracleadd_monthstrunc用法

  oracle中add_months和trunc用法 2012-06-13 13:45  646人閱讀  評論(0)  收藏  舉報 oracle date sql 工作

Oraclesyssystem使用者的區別

  Oracle中sys和system使用者的區別 1.資料庫的啟動需要以SYSDBA/SYSOPER身份登入。 2.如果在同一主機上使用IPC連線到資料庫使用作業系統授權,登入任何一個使用者都可以擁有as sysdba和as sysoper。 3.sys和system使用

Oracleanyall

any   select empno,sal from emp where sal > any(3000,950); 只需要大於(3000,900)中的任意一個即可     all select empno,sal from emp

解決spring檔案contexttx標籤無提示問題

(1)首先檢視xml配置檔案頭是否存在相應的xmlns(名稱空間)和xsi:schemaLocation是否存在,1步驟和2步驟同時進行 (2)新增相對應的xsd檔案路徑,以新增tx.xsd檔案路徑為例(如果沒有spring包,檢視下面附加的spring框架下載) &

OracleINSTRSUBSTR的用法

                Oracle中INSTR的用法: INSTR方法的格式為INSTR(源字串, 要查詢的字串, 從第幾個字元開始, 要找到第幾個匹配的序號)返回找到的位置,如果找不到則返回0.例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字串為'CORPORA

HTTP請求GETPOST的分析

近期一位朋友想寫iOS上的應用,打算從微博應用做起,第一步先做一個微部落格戶端出來,然後做一個手機微博應用出來,具體做什麼還不甚清楚,其實是在嘗試中。而我正好在用asio寫網路庫,於是主動提出了承擔web伺服器網路庫的部分,也是為了給我自己封裝的網路庫中增加一個http模組。http大家都不陌生,每天開啟網頁