https://www.2cto.com/database/201611/562166.html
概述
ORACLE函数系列:
Oracle-分析函数之连续求和sum(…) over(…)
Oracle-分析函数之排序值rank()和dense_rank()
Oracle-分析函数之排序后顺序号row_number()
Oracle-分析函数之取上下行数据lag()和lead()
这两个函数是偏移量函数,可以查出一个字段的上一个值或者下一个值,配合over来使用。
lead函数,这个函数是向上偏移.
lag函数是向下偏移一位.
语法
【语法】
1
|
lag(EXPR,<offset>,<
default
>)</
></offset>
|
【功能】表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)
lead () 下一个值 lag() 上一个值
【参数】
EXPR是从其他行返回的表达式 OFFSET是缺省为1 的正数,表示相对行数。希望检索的当前行分区的偏移量 DEFAULT是在OFFSET表示的数目超出了分组的范围时返回的值。exp_str 是要做对比的字段
offset 是exp_str字段的偏移量 比如说 offset 为2 则 拿exp_str的第一行和第三行对比,第二行和第四行,依次类推,offset的默认值为1!
【说明】Oracle分析函数
栗子
2
3
4
5
6
create
table
LEAD_TABLE
(
CASEID VARCHAR2(10),
STEPID VARCHAR2(10),
ACTIONDATE
DATE
)
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
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 ;
|
进一步统计一下两者的相差天数
13
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) ;