oracle lag()和lead()
來源:易賢網(wǎng) 閱讀:991 次 日期:2015-04-01 16:51:25
溫馨提示:易賢網(wǎng)小編為您整理了“oracle lag()和lead()”,方便廣大網(wǎng)友查閱!

LAG()和LEAD()統(tǒng)計(jì)函數(shù)可以在一次查詢中取出同一字段的前N行的數(shù)據(jù)和后N行的值。這種操作可以使用對相同表的表連接來實(shí)現(xià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函數(shù)為Lag(exp,N,defval),defval是當(dāng)該函數(shù)無值可用的情況下返回的值。Lead函數(shù)的用法類似。

Lead和Lag函數(shù)也可以使用分組,以下是使用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) ,

證件號(hào)碼 VARCHAR(255) ,

姓名 VARCHAR(255) ,

性別 VARCHAR(255) ,

行政區(qū)劃 VARCHAR(255) ,

旅館名稱 VARCHAR(255) ,

旅館地址 VARCHAR(255) ,

房間號(hào) VARCHAR(255) ,

入住時(shí)間 VARCHAR(255) ,

col012 VARCHAR(255)

);

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1234','ZHANGTAO','A','20100506');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1234','ZHANGTAO','A','20100507');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1234','ZHANGTAO','B','20100508');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1234','ZHANGTAO','A','20100509');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1235','ZZZZ','A','20100506');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1235','ZZZZ','B','20100507');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1235','ZZZZ','A','20100508');

INSERT INTO LDY_TEMP_2

(證件號(hào)碼,姓名,旅館名稱,入住時(shí)間)

VALUES('1235','ZZZZ','B','20100509');

建表語句和測試數(shù)據(jù)已經(jīng)給出 請問 如何查找相鄰兩次入住旅館名稱不同的人;也就是說 一個(gè)人的證件號(hào)碼是123的話 那么這個(gè)人的信息按照入住時(shí)間排序后 相鄰兩條數(shù)據(jù)的旅館名稱不能一樣 。

解答:

with temp_a as

(select

t.證件號(hào)碼,

t.旅館名稱,

t.入住時(shí)間,

lag(t.旅館名稱) over (partition by t.證件號(hào)碼 order by t.入住時(shí)間) as lagname

from ldy_temp_2 t)

select 證件號(hào)碼,姓名,旅館名稱,入住時(shí)間

from ldy_temp_2 a

where a.證件號(hào)碼 not in (select b.證件號(hào)碼 from temp_a b where b.旅館名稱=b.lagname)

更多信息請查看IT技術(shù)專欄

更多信息請查看數(shù)據(jù)庫
易賢網(wǎng)手機(jī)網(wǎng)站地址:oracle lag()和lead()
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)