zoukankan      html  css  js  c++  java
  • oracle函数 lag()和lead()

    【语法】

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

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

    【功能】表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)

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

     

    【参数】

    EXPR是从其他行返回的表达式

    OFFSET是缺省为1 的正数,表示相对行数。希望检索的当前行分区的偏移量

    DEFAULT是在OFFSET表示的数目超出了分组的范围时返回的值。

    【说明】Oracle分析函数

     

    【示例】

    -- Create table

    create table LEAD_TABLE

    (

     CASEID VARCHAR2(10),

     STEPID VARCHAR2(10),

     ACTIONDATE DATE

    )

    tablespace COLM_DATA

     pctfree 10

     initrans 1

     maxtrans 255

     storage

     (

     initial 64K

     minextents 1

     maxextents unlimited

     );

     

    insert into LEAD_TABLE values('Case1','Step1',to_date('20070101','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step2',to_date('20070102','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step3',to_date('20070103','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step4',to_date('20070104','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step5',to_date('20070105','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step4',to_date('20070106','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step6',to_date('20070101','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case1','Step1',to_date('20070201','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case2','Step2',to_date('20070202','yyyy-mm-dd'));

    insert into LEAD_TABLE values('Case2','Step3',to_date('20070203','yyyy-mm-dd'));

    commit;

     

    结果如下:

     

    Case1 Step1 2007-1-1 Step2 2007-1-2

    Case1 Step2 2007-1-2 Step3 2007-1-3 Step1 2007-1-1

    Case1 Step3 2007-1-3 Step4 2007-1-4 Step2 2007-1-2

    Case1 Step4 2007-1-4 Step5 2007-1-5 Step3 2007-1-3

    Case1 Step5 2007-1-5 Step4 2007-1-6 Step4 2007-1-4

    Case1 Step4 2007-1-6 Step6 2007-1-7 Step5 2007-1-5

    Case1 Step6 2007-1-7 Step4 2007-1-6

    Case2 Step1 2007-2-1 Step2 2007-2-2

    Case2 Step2 2007-2-2 Step3 2007-2-3 Step1 2007-2-1

    Case2 Step3 2007-2-3 Step2 2007-2-2

     

    还可以进一步统计一下两者的相差天数

     

    select caseid,stepid,actiondate,nextactiondate,nextactiondate-actiondate datebetween from (

    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) preactiondate

    from lead_table)

    结果如下:

     

    Case1 Step1 2007-1-1 2007-1-2 1

    Case1 Step2 2007-1-2 2007-1-3 1

    Case1 Step3 2007-1-3 2007-1-4 1

    Case1 Step4 2007-1-4 2007-1-5 1

    Case1 Step5 2007-1-5 2007-1-6 1

    Case1 Step4 2007-1-6 2007-1-7 1

    Case1 Step6 2007-1-7

    Case2 Step1 2007-2-1 2007-2-2 1

    Case2 Step2 2007-2-2 2007-2-3 1

    Case2 Step3 2007-2-3

     

    每一条记录都能连接到上/下一行的内容

     

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

     

    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) preactiondate

    from lead_table

  • 相关阅读:
    汽车加油问题--贪心算法
    区间相交问题---贪心算法
    算法-动态规划-数字三角问题
    jar转成exe
    kafka zookeeper学习(2) 测试kafka与zookeeper环境
    kafka zookeeper学习(1) windows搭建kafka与zookeeper环境
    java调用linux系统命令
    linux hg(mercurial)入门
    redis集群构建过程 linux windows
    Java JTextArea不能实时刷新的问题
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11119222.html
Copyright © 2011-2022 走看看