,)SQL>selectyear,region,profit,lag(profit,1)over(orderbyyear)as51xit_expfromtest;YEARREGIONPRO" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

oracle中LAG()和LEAD()等分析統計函數的使用方

系統 2118 0

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()等分析統計函數的使用方法(統計月增長率)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 鄯善县| 罗平县| 阿拉善盟| 景泰县| 龙江县| 金昌市| 眉山市| 竹北市| 镇巴县| 丘北县| 米易县| 广宁县| 平昌县| 平潭县| 阿坝| 邛崃市| 青龙| 大埔县| 霸州市| 宁远县| 洛川县| 闵行区| 田林县| 盖州市| 团风县| 金塔县| 乌苏市| 海安县| 古丈县| 永平县| 柳州市| 左贡县| 措勤县| 灵川县| 常州市| 固安县| 惠来县| 额济纳旗| 五指山市| 潍坊市| 大同市|