这两个函数是偏移量函数,可以查出一个字段的上一个值或者下一个值,配合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. GridView树状结构显示

    下面的树形结构代码需要GridVIew中的数据要求是按照上下级关系已经排列好的顺序,比如: GridView ID ParentID Name 1 0 父1 2 1 父1子1 3 1 父1子2 4 3 ...

  2. python实现查找最长公共子序列

    #!/usr/bin/python # -*- coding: UTF-8 -*- worlds = ['fosh','fort','vista','fish','hish','hello','ohd ...

  3. Django组件之auth

    一.什么是Auth模块 Auth模块是Django自带的用户认证模块,默认使用 auth_user 表来存储用户数据. 二.使用方法 1.创建超级用户 python3 manage.py create ...

  4. 基于OpenCV制作道路车辆计数应用程序

    基于OpenCV制作道路车辆计数应用程序 发展前景 随着科学技术的进步和工业的发展,城市中交通量激增,原始的交通方式已不能满足要求:同时,由于工业发展为城市交通提供的各种交通工具越来越多,从而加速了城 ...

  5. 【Linux】Linux目录结构及详细介绍

    00. 目录 01. 常用目录介绍 /:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区 ...

  6. yii2 发送邮件 yii\swiftmailer\Mailer

    Yii2 中发送邮件 yii\swiftmailer\Mailer 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath ...

  7. quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0

    quartz2.3.0系列目录 官网下载地址:http://www.quartz-scheduler.org/downloads/ 本系列demo全部来源于官网,仅仅是简化和汉化了注释!一部分代码de ...

  8. apache-httpd代理请求,selinux造成503问题的解决方法

    NameVirtualHost *:80 <VirtualHost *:80> ServerName test.baidu.com ProxyPreserveHost on ProxyPa ...

  9. mac 上使用 idea 上传项目代码到阿里云git上

    1.Idea 打开需要上传的项目   2.先在本地创建一个git仓库 VCS --> Import into Version Control --> Create Git reposito ...

  10. css文字的渐变色设置

      background-image: -webkit-linear-gradient( ); //设置颜色与渐变方向   -webkit-background-clip: text; //主要用于剪 ...