这两个函数是偏移量函数,可以查出一个字段的上一个值或者下一个值,配合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. 从Asp .net到Asp core (第二篇)《Asp Core 的生命周期》

    前面一篇文章简单回顾了Asp .net的生命周期,也简单提到了Asp .net与Asp Core 的区别,我们说Asp Core不在使用Asp.netRuntime,所以它也没有了web程序生命周期中 ...

  2. day32——进程、操作系统

    day32 进程的基础 程序 一堆静态的代码文件 进程 一个正在运行的程序进程.抽象的概念 被谁运行? 由操作系统操控调用交于CPU运行 ​ 操作系统 管理控制协调计算机中硬件与软件的关系 操作系统的 ...

  3. Nginx限制访问速率和最大并发连接数模块--limit (防范DDOS攻击)

    Tengine版本采用http_limit_req_module进行限制 具体连接请参考 http://tengine.taobao.org/document_cn/http_limit_req_cn ...

  4. robotframework_javaScript定位

    整理笔记才发现,只有在rebotframework才用过js定位,那么如果有小伙伴在使用js遇到问题,给我留言吧 通过Id定位   name定位 通过标签名查找 HTML 元素 本例查找 id=&qu ...

  5. [UOJ #167]【UR #11】元旦老人与汉诺塔

    题目大意:给你一个有$n$个盘子的汉诺塔状态$S$,问有多少种不同的操作方法,使得可以在$m$步以内到达状态$T$.$n,m\leqslant100$ 题解:首先可以知道的是,一个状态最多可以转移到其 ...

  6. Spring Boot,Spring Security实现OAuth2 + JWT认证

    阅读此文,希望是对JWT以及OAuth2有一定了解的童鞋. JWT认证,提供了对称加密以及非对称的实现. 内容源码点我 涉及到源码中两个服务 spring-boot-oauth-jwt-server ...

  7. Python简单的CTF题目hash碰撞小脚本

    Python简单的CTF题目hash碰撞小脚本 import hashlib for num in range(10000,9999999999): res = hashlib.sha1(str(nu ...

  8. sql server 处理特殊字符问题

    对于中文版的SQL SERVER,默认安装后使用的默认排序规则为Chinese_PRC_CI_AS,在此排序规则下,使用varchar类型来可以“正常存取”存放中文字符以及一些东南亚国家的字符, 同时 ...

  9. kafka环境安装及简单使用(单机版)

    一个分布式发布-订阅消息传递系统 特点: 高吞吐量.低延迟 使用场景(举例): 日志收集:用kafka收集各种服务产生的log,通过kafka以统一的接口服务的方式开放给各种consumer,如had ...

  10. SpringBoot+SpringCloud+vue+Element开发项目——集成MyBatis框架

    添加mybatis-spring-boot-starter依赖 pox.xml <!--mybatis--> <dependency> <groupId>org.m ...