微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle-分析函数之取上下行数据lag()和lead()

https://www.2cto.com/database/201611/562166.html

概述

ORACLE函数系列:

Oracle常见函数大全

Oracle-分析函数之连续求和sum(…) over(…)

Oracle-分析函数之排序值rank()和dense_rank()

Oracle-分析函数之排序后顺序号row_number()

Oracle-分析函数之取上下行数据lag()和lead()


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

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

语法

【语法】

?
1
lag(EXPR,<offset>,< default >)</ ></offset>
LEAD(EXPR,monospace;font-size:1em;min-height:auto;color:#000000;">></offset>

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

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

【参数】

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

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

【说明】Oracle分析函数

栗子

1
2
3
4
5
6
create table LEAD_TABLE
(
CASEID VARCHAR2(10),
STEPID VARCHAR2(10),
ACTIONDATE DATE
)
?
6
7
8
9
10
11
12
insert into LEAD_TABLE values ( 'Case1' , 'Step1' sql plain" style="background:none;border:0px;line-height:1.1em;vertical-align:baseline;font-family:Consolas,to_date( '20161101' 'yyyy-mm-dd' ));
'Step2' '20161102' ));
'Step3' '20161103' ));
'Step4' '20161104' ));
'Step5' '20161105' ));
'20161106' ));
'Step6' '20161107' ));
'20161201' ));
'Case2' '20161202' ));
'20161203' ));
commit ;

数据规格:

输出当前 和 之前 之后的date 和 step

?
9
select
a.caseid,
a.stepid as currentStepID,monospace;font-size:1em;min-height:auto;color:#000000;">a.actiondate currentActionDate,monospace;font-size:1em;min-height:auto;color:#000000;">lead(stepid) over(partition by a.caseid order a.stepid) nextStep,
lead(actiondate) over(partition a.stepid) nextActionDate,
lag(stepid) over(partition a.stepid) preStep,
lag(actiondate) over(partition a.stepid) preActionDate
from lead_table a ;

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

12
13
select caseid,
stepid,monospace;font-size:1em;min-height:auto;color:#000000;">actiondate,monospace;font-size:1em;min-height:auto;color:#000000;">nextactiondate,monospace;font-size:1em;min-height:auto;color:#000000;">nextactiondate - actiondate datebetween
( sql keyword" style="background:none;border:0px;line-height:1.1em;vertical-align:baseline;font-family:Consolas,
caseid actiondate) nextstepid,
actiondate) nextactiondate,
actiondate) prestepid,
actiondate) preactiondate
lead_table) ;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐