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)
相關推薦
oracle中LAG()和LEAD()等分析統計函式的用法(統計月增長率)
LAG()和LEAD()統計函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和 LEAD有更高的效率。以下整理的LAG()和LEAD()例子: LAG(EXPRESSION,<OFFSET>
oracle分析函式系列之LAG和LEAD:取出同一欄位的前N行的資料和後N行的值
Lag和Lead函式可以在一次查詢中取出同一欄位的前N行的資料和後N行的值。這種操作可以使用對相同表的表連線來實現,不過使用LAG和LEAD有更高的效率。以下是LAG和LEAD的例子: SQL> select year,region,profit ,lag (pr
oracle中union和union 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
關於在mysql和oracle中編碼對varchar等型別的影響
今天在測試oracle的時候發現,我用varchar2(10),的欄位,居然存不下“凱爾特人”四個字元;和我在學習mysql中顯然是不一樣的,查閱資料發現:mysql 5.0 之後 varchar(1)是可以存一個字元,不管是數字、英文字母還是漢字都可以(UTF8,三個位元組
oracle求同比,環比函式 LAG和LEAD
CREATE TABLE salaryByMonth ( employeeNo varchar2(20), yearMonth varchar2(6), salary number ) ; insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALAR
oracle中rownum和row_number()
cnblogs 計算 順序分配 每一個 total tom ins 使用 div row_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函數計算的值就表示每組內部排序後的順序編
Oracle中chr()和ascii()函數(附:常用字符與ascii對照表)
關鍵字 回車 pps body api adding com eve amp Oracle中chr()和ascii()函數(附:常用字符與ascii對照表) 關鍵字:chr() chr()函數作用:“特殊”字符特殊處理 在PLSql中可查詢相對應的字碼與特殊符 chr()函
ORACLE中NVLl和COALESCE的區別
oracl 第一個 ssi 必須 如果 不一致 miss 兩個 oal nvl(COMMISSION_PCT,0)如果第一個參數為null,則返回第二個參數如果第一個參數為非null,則返回第一個參數 COALESCE(EXPR1,EXPR2,EXPR3...EXPRn)從
Oracle中Blob和Clob
oracl rac clas 存儲 tchar ring jdbc input inpu Blob是指二進制大對象也就是英文Binary Large Object的所寫;Clob是指大字符對象也就是英文Character Large Object的所寫。因此這兩個類型都是用
ORACLE中SID和SERVICE_NAME的區別
spring 好的 java應用程序 系列 sdn 文件 數據 jdbc 修改 先來講一個小故事,2015年6月份,有個客戶遷移了數據庫,由單實例數據庫變成了RAC。JAVA應用程序出現了無法連接數據庫的情況,但是PL/SQL能連接上數據庫。由於項目比較龐大,
深度學習中 GPU 和視訊記憶體分析 深度學習中 GPU 和視訊記憶體分析
轉 深度學習中 GPU 和視訊記憶體分析 2017年12月21日 14:05:01 lien0906 閱讀數:5941 更多
Oracle中instr和substr 的應用
instr函式 instr函式用於從指定的位置開始,從某物件中查詢第N個與模式匹配的字串。 例項: SELECT instr(‘syranmo’,’s’) FROM dual; – 返回 1 SELECT instr(‘syranmo’,’ra’) FROM dual; –
ORACLE中date和timestamp的相互轉化
原文章地址:https://blog.csdn.net/chenlong331409178/article/details/47441025 oracle 中date型別精確可以年月日,時分秒,timestamp型別可以精確的秒一下 data轉為timstamp data 轉為timstam可
oracle中add_months和trunc用法
oracle中add_months和trunc用法 2012-06-13 13:45 646人閱讀 評論(0) 收藏 舉報 oracle date sql 工作
Oracle中sys和system使用者的區別
Oracle中sys和system使用者的區別 1.資料庫的啟動需要以SYSDBA/SYSOPER身份登入。 2.如果在同一主機上使用IPC連線到資料庫使用作業系統授權,登入任何一個使用者都可以擁有as sysdba和as sysoper。 3.sys和system使用
Oracle中any和all
any select empno,sal from emp where sal > any(3000,950); 只需要大於(3000,900)中的任意一個即可 all select empno,sal from emp
解決spring檔案中context和tx等標籤無提示問題
(1)首先檢視xml配置檔案頭是否存在相應的xmlns(名稱空間)和xsi:schemaLocation是否存在,1步驟和2步驟同時進行 (2)新增相對應的xsd檔案路徑,以新增tx.xsd檔案路徑為例(如果沒有spring包,檢視下面附加的spring框架下載) &
Oracle中INSTR和SUBSTR的用法
Oracle中INSTR的用法: INSTR方法的格式為INSTR(源字串, 要查詢的字串, 從第幾個字元開始, 要找到第幾個匹配的序號)返回找到的位置,如果找不到則返回0.例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字串為'CORPORA
HTTP請求中GET和POST的分析
近期一位朋友想寫iOS上的應用,打算從微博應用做起,第一步先做一個微部落格戶端出來,然後做一個手機微博應用出來,具體做什麼還不甚清楚,其實是在嘗試中。而我正好在用asio寫網路庫,於是主動提出了承擔web伺服器網路庫的部分,也是為了給我自己封裝的網路庫中增加一個http模組。http大家都不陌生,每天開啟網頁