日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle-分析函数之取上下行数据lag()和lead()

發(fā)布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle-分析函数之取上下行数据lag()和lead() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

ORACLE函數(shù)系列:

Oracle常見函數(shù)大全

Oracle-分析函數(shù)之連續(xù)求和sum(…) over(…)

Oracle-分析函數(shù)之排序值rank()和dense_rank()

Oracle-分析函數(shù)之排序后順序號row_number()

Oracle-分析函數(shù)之取上下行數(shù)據(jù)lag()和lead()


這兩個函數(shù)是偏移量函數(shù),可以查出一個字段的上一個值或者下一個值,配合over來使用。

lead函數(shù),這個函數(shù)是向上偏移.
lag函數(shù)是向下偏移一位.

語法

【語法】

lag(EXPR,<OFFSET>,<DEFAULT>) LEAD(EXPR,<OFFSET>,<DEFAULT>)

【功能】表示根據(jù)COL1分組,在分組內(nèi)部根據(jù) COL2排序,而這個值就表示每組內(nèi)部排序后的順序編號(組內(nèi)連續(xù)的唯一的)

lead () 下一個值 lag() 上一個值

【參數(shù)】

  • EXPR是從其他行返回的表達(dá)式
  • OFFSET是缺省為1 的正數(shù),表示相對行數(shù)。希望檢索的當(dāng)前行分區(qū)的偏移量
  • DEFAULT是在OFFSET表示的數(shù)目超出了分組的范圍時返回的值。

exp_str 是要做對比的字段
offset 是exp_str字段的偏移量 比如說 offset 為2 則 拿exp_str的第一行和第三行對比,第二行和第四行,依次類推,offset的默認(rèn)值為1!

【說明】Oracle分析函數(shù)


栗子

create table LEAD_TABLE (CASEID VARCHAR2(10),STEPID VARCHAR2(10),ACTIONDATE DATE ) insert into LEAD_TABLE values('Case1','Step1',to_date('20161101','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step2',to_date('20161102','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step3',to_date('20161103','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step4',to_date('20161104','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step5',to_date('20161105','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step4',to_date('20161106','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step6',to_date('20161107','yyyy-mm-dd')); insert into LEAD_TABLE values('Case1','Step1',to_date('20161201','yyyy-mm-dd')); insert into LEAD_TABLE values('Case2','Step2',to_date('20161202','yyyy-mm-dd')); insert into LEAD_TABLE values('Case2','Step3',to_date('20161203','yyyy-mm-dd'));commit;

數(shù)據(jù)規(guī)格:

輸出當(dāng)前 和 之前 之后的date 和 step

select a.caseid ,a.stepid as currentStepID,a.actiondate as currentActionDate,lead(stepid) over(partition by a.caseid order by a.stepid) nextStep,lead(actiondate) over(partition by a.caseid order by a.stepid) nextActionDate,lag(stepid) over(partition by a.caseid order by a.stepid) preStep,lag(actiondate) over(partition by a.caseid order by a.stepid) preActionDatefrom lead_table a ;

進(jìn)一步統(tǒng)計一下兩者的相差天數(shù)

select caseid,stepid,actiondate,nextactiondate,nextactiondate - actiondate datebetweenfrom (select caseid,stepid,actiondate,lead(stepid) over(partition by caseid order by actiondate) nextstepid,lead(actiondate) over(partition by caseid order by actiondate) nextactiondate,lag(stepid) over(partition by caseid order by actiondate) prestepid,lag(actiondate) over(partition by caseid order by actiondate) preactiondatefrom lead_table) ;

總結(jié)

以上是生活随笔為你收集整理的Oracle-分析函数之取上下行数据lag()和lead()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。