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

  • 相关阅读:
    IIS7 配置PHP服务器
    WebAPI Post请求多参数处理方案
    Mssql 跨域查询
    sql 给数据库表 字段 添加注释
    log4net配置文件
    搭建svn服务器小结
    Django测试开发-30- xadmin模板中class Meta:和def __str__(self):的应用
    Django测试开发-29- xadmin模板中详情页面布局form_layout详解
    Django测试开发-28- xadmin模板中related_name和_set()用法
    Django测试开发-27- xadmin模板中注册增加Student和Teacher,Card及CardDetail表
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11119222.html
Copyright © 2011-2022 走看看