这两个函数是偏移量函数,可以查出一个字段的上一个值或者下一个值,配合over来使用。

lead函数,这个函数是向上偏移. 
lag函数是向下偏移一位.

语法

【语法】

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

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

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

【参数】

  • EXPR是从其他行返回的表达式
  • OFFSET是缺省为1 的正数,表示相对行数。希望检索的当前行分区的偏移量
  • DEFAULT是在OFFSET表示的数目超出了分组的范围时返回的值。

exp_str 是要做对比的字段 
offset 是exp_str字段的偏移量 比如说 offset 为2 则 拿exp_str的第一行和第三行对比,第二行和第四行,依次类推,offset的默认值为1!

【说明】Oracle分析函数


栗子

create table LEAD_TABLE
(
CASEID VARCHAR2(10),
STEPID VARCHAR2(10),
ACTIONDATE DATE
)
insert into LEAD_TABLE values('Case1','Step1',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step2',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step3',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step4',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step5',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step4',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step6',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step1',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case2','Step2',to_date('','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case2','Step3',to_date('','yyyy-mm-dd')); commit;

数据规格: 

输出当前 和 之前 之后的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) preActionDate
from lead_table a ;

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

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

Oracle-分析函数之取上下行数据lag()和lead()的更多相关文章

  1. bash计算上下行数据差值

    for i in {1..60000}; do echo "`date +'%F %T'` `df /dev/md0 | grep 'data1'` "; sleep 1; don ...

  2. 常用Oracle分析函数详解 [http://www.cnblogs.com/benio/archive/2011/06/01/2066106.html]

      学习步骤:1. 拥有Oracle EBS demo 环境 或者 PROD 环境2. copy以下代码进 PL/SQL3. 配合解释分析结果4. 如果网页有点乱请复制到TXT中查看 /*假设一个经理 ...

  3. 强大的oracle分析函数

    转载:https://www.cnblogs.com/benio/archive/2011/06/01/2066106.html 学习步骤:1. 拥有Oracle EBS demo 环境 或者 PRO ...

  4. 常用Oracle分析函数详解

    学习步骤:1. 拥有Oracle EBS demo 环境 或者 PROD 环境2. copy以下代码进 PL/SQL3. 配合解释分析结果4. 如果网页有点乱请复制到TXT中查看 /*假设一个经理代表 ...

  5. oracle lag与lead分析函数简介

    lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数我们可以取到当前行列的偏移N行列的值 lag可以看着是正的向上的偏移 lead可以认为负的向下的偏移 具体我们来看几个例子: 我们先看下 ...

  6. oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  7. oracle 列相减——(Oracle分析函数Lead(),Lag())

    lag和lead函数,用于取出数据的前n行的数据和后n行的数据,当然要和over(order by)一起组合 其实这2个函数的作用非常好理解,Lead()就是取当前顺序的下一条记录,相对Lag()就是 ...

  8. Oracle 分析函数之 lag和lead

    Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列. 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率. /*语法*/   ...

  9. Oracle下lag和lead分析函数

    [转自] http://blog.csdn.net/thinkscape/article/details/8290894 Lead和Lag分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag) ...

随机推荐

  1. mvn命令着中package、install、deploy的区别

    参考:https://blog.csdn.net/zhaojianting/article/details/80324533 常用操作区别 mvn clean package 依次执行了clean.r ...

  2. Synchronized实现原理及和Lock的区别

    Synchronized 无锁,偏向锁,轻量级锁 ,重量级锁 偏向锁:对象头存储线程ID,可重入(根据线程ID判断) 轻量级锁:复制对象头到Lock Record 记录锁信息,拥有锁 复制的Lock ...

  3. Java生成菜单树(目录树)的几种方式

    本文介绍两种不同生成多级目录树的方式:1. 递归生成,2.  map+list 集合生成.最下方会附上完整代码. 生成树的基本规则:子节点的par_id等于父节点的id. 1. 实体类 import ...

  4. 有关java中的try{}catch(){}的讲解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_38225558/article/d ...

  5. IdentityServer4(客户端授权模式)

    1.新建三个项目 IdentityServer:端口5000 IdentityAPI:端口5001 IdentityClient: 2.在IdentityServer项目中添加IdentityServ ...

  6. spring-boot-starter-parent的主要作用

    SpringBoot项目一般都会配置starter-parent依赖. 示例: <parent> <groupId>org.springframework.boot</g ...

  7. Python之TensorFlow的基本介绍-1

    一.TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经 ...

  8. ASP.NET Core在支付宝小程序中使用signalR

    Github有一个经过重写的微信小程序SignalR的js类库 https://github.com/liangshiw/SignalRMiniProgram-Client 于是我把他改成支付宝小程序 ...

  9. PHP导出XML格式的EXCEL

    <?php function Export(){ set_time_limit(0); ob_start(); $biz = new ZaikuBiz(); $biz->setSearch ...

  10. windows下git创建本地分支并建立对应远程分支

    在对应项目目录下打开命令提示符 git branch -a      查看所有本地和远程分支 git checkout -b [newBranch]     建立本地分支newBranch git p ...