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

前端之家收集整理的这篇文章主要介绍了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>,<@H_403_43@ default@H_403_43@ >)</@H_403_43@ ></offset>@H_403_43@
LEAD(EXPR,monospace;font-size:1em;min-height:auto;color:#000000;">></offset>@H_403_43@

功能】表示根据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@H_403_43@ table@H_403_43@ LEAD_TABLE@H_403_43@
(@H_403_43@
@H_403_43@ CASEID VARCHAR2(10),@H_403_43@
STEPID VARCHAR2(10),@H_403_43@
ACTIONDATE @H_403_43@ DATE@H_403_43@
)@H_403_43@
?
@H_404_144@ 6
7
8
9
10
11
12
insert@H_403_43@ into@H_403_43@ LEAD_TABLE @H_403_43@ values@H_403_43@ (@H_403_43@ 'Case1'@H_403_43@ ,@H_403_43@ 'Step1'@H_403_43@ sql plain" style="background:none;border:0px;line-height:1.1em;vertical-align:baseline;font-family:Consolas,to_date(@H_403_43@ '20161101'@H_403_43@ 'yyyy-mm-dd'@H_403_43@ ));@H_403_43@
'Step2'@H_403_43@ '20161102'@H_403_43@ ));@H_403_43@
'Step3'@H_403_43@ '20161103'@H_403_43@ ));@H_403_43@
'Step4'@H_403_43@ '20161104'@H_403_43@ ));@H_403_43@
'Step5'@H_403_43@ '20161105'@H_403_43@ ));@H_403_43@
'20161106'@H_403_43@ ));@H_403_43@
'Step6'@H_403_43@ '20161107'@H_403_43@ ));@H_403_43@
'20161201'@H_403_43@ ));@H_403_43@
'Case2'@H_403_43@ '20161202'@H_403_43@ ));@H_403_43@
'20161203'@H_403_43@ ));@H_403_43@
commit@H_403_43@ ;@H_403_43@

数据规格:

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

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

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

12
13
select@H_403_43@ caseid,@H_403_43@
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@H_403_43@
(@H_403_43@ sql keyword" style="background:none;border:0px;line-height:1.1em;vertical-align:baseline;font-family:Consolas,@H_403_43@
caseid @H_403_43@ actiondate) nextstepid,@H_403_43@
actiondate) nextactiondate,@H_403_43@
actiondate) prestepid,@H_403_43@
actiondate) preactiondate@H_403_43@
lead_table) ;@H_403_43@

猜你在找的Oracle相关文章