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

  • 相关阅读:
    java中的IO整理
    指针 study~O(∩_∩)O~
    const形参与非const形参
    最大公约数递归求解
    值传递、地址传递、引用传递(参考网上各种资料总结哦~)
    windows8开发笔记(4)消息弹出动画
    Azure绑定域名以及利用FTP上传文件
    windows8安装第三方Modern UI(Metro)应用方法
    windows8开发笔记(2)通知
    windows8开发笔记(5)说说Json的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11119222.html
Copyright © 2011-2022 走看看