無需添加內(nèi)聯(lián)結(jié)構(gòu)便可以是實現(xiàn)訪問當(dāng)前行附近行的字段的lead :向后 lag: 向前. 語法結(jié)構(gòu): lag(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause) lead(value_expr [,offset][,default]) over([query_partition_cla
無需添加內(nèi)聯(lián)結(jié)構(gòu)便可以是實現(xiàn)訪問當(dāng)前行附近行的字段的值lead :向后 lag: 向前.
語法結(jié)構(gòu):
lag(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause)
lead(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause)
參數(shù)說明:
value_expr值表達(dá)式,通常是字段,也可是是表達(dá)式。value_expr本身不支持分析函數(shù),也就是lead不支持多層調(diào)用。
offset偏移,應(yīng)該是很熟悉的數(shù)學(xué)概念了,或者是相對偏移,表格來開當(dāng)前行的第offset行,如果offset是整數(shù)就表示是順序下的前第n行,如果是負(fù)數(shù)就是往后第n行。如果不提供這個參數(shù),就是默認(rèn)為1.
default默認(rèn)值,如果沒有找到,應(yīng)該返回什么值的意思,有點類似nvl(col,value)。如果沒有設(shè)置,且找不到,那么就返回Null
over 可以簡單地翻譯為在什么。。的基礎(chǔ)之上
query_partition_clause 分區(qū)語句,對結(jié)果集合分區(qū)的語句,是可選的,如果沒有就是所有的一個分區(qū)。
Order_by_clause排序語句必須需要 ,形如order by xxx desc/asc
解釋示例:
SQL> select * from test_value;
MONS JJR CJL CJJE
---------- ---------- ---------- ----------
200801 LZF 250 1999
200802 LZF 200 2000
200803 LZF 300 1000
200804 LZF 23 189
200805 LZF 356 456
200806 LZF 100 200
200807 LZF 600 700
200808 LZF 23 123
200809 LZF 400 500
9 rows selected
SQL>
SQL> select rownum序號,Mons,cjl cjl_01,
2 lead(cjl,1) over (order by mons desc) cjl_02,
3 lead(cjl,2) over (order by mons desc) cjl_03,
4 lead(cjl,3) over (order by mons desc) cjl_04,
5 lead(cjl,4) over (order by mons desc) cjl_05,
6 lead(cjl,5) over (order by mons desc) cjl_06,
7 lead(cjl,6) over (order by mons desc) cjl_07,
8 lead(cjl,7) over (order by mons desc) cjl_08,
9 lead(cjl,8) over (order by mons desc) cjl_09
10 from test_value
序號 MONS CJL_01 CJL_02 CJL_03 CJL_04 CJL_05 CJL_06 CJL_07 CJL_08 CJL_09
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
9 200809 400 23 600 100 356 23 300 200 250
8 200808 23 600 100 356 23 300 200 250
7 200807 600 100 356 23 300 200 250
6 200806 100 356 23 300 200 250
5 200805 356 23 300 200 250
4 200804 23 300 200 250
3 200803 300 200 250
2 200802 200 250
1 200801 250
實踐使用示例:
select id,lead(id,1)over(partition by call_req_id order by call_req_id ,id),type,analyst,time_stamp from act_log order by call_req_id ,id
擴(kuò)展:
求字段差值為固定值的所有記錄集合,一般會考慮取余mod(field,difNumber);
例如: 求表中所有ID相差為7的所有記錄,
可以考慮 (每行記錄的id - 第一行記錄的id)對7取余等于0;
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com