1.函数功能

Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。

2.lag和lead语法:

ag(exp_str,offset,defval) over()
exp_str 是要做对比的字段
offset 是exp_str字段的偏移量 比如说 offset 为2 则 拿exp_str的第一行和第三行对比,第二行和第四行,依次类推,offset的默认值为1!
defval是当该函数无值可用的情况下返回的值。Lead函数的用法类似。

3.示例:

面以求同比、环比为例,给出lag的用法,lead类似:

数据准备:

create table tmp_lxq_1
(
statdate date,
province varchar2(25) null,
premium number(18)
);

insert into tmp_lxq_1 select date '2012-01-01', '北京', 100 from dual;
insert into tmp_lxq_1 select date '2012-02-01', '北京', 110 from dual;
insert into tmp_lxq_1 select date '2012-03-01', '北京', 120 from dual;
insert into tmp_lxq_1 select date '2012-04-01', '北京', 130 from dual;
insert into tmp_lxq_1 select date '2012-05-01', '北京', 150 from dual;
insert into tmp_lxq_1 select date '2012-06-01', '北京', 160 from dual;
insert into tmp_lxq_1 select date '2012-07-01', '北京', 170 from dual;
insert into tmp_lxq_1 select date '2012-08-01', '北京', 180 from dual;
insert into tmp_lxq_1 select date '2012-09-01', '北京', 190 from dual;
insert into tmp_lxq_1 select date '2012-10-01', '北京', 1100 from dual;
insert into tmp_lxq_1 select date '2012-11-01', '北京', 1110 from dual;
insert into tmp_lxq_1 select date '2012-12-01', '北京', 1120 from dual;
insert into tmp_lxq_1 select date '2013-01-01', '北京', 1130 from dual;
commit;

 

求环比数据:

select t.statdate,
       t.province,
       t.premium as 当期数,
       lag(premium, 1, null) over(order by statdate asc) as 前期数,
       round((t.premium - (lag(premium, 1, null) over(order by statdate asc))) /
       lag(premium, 1, null) over(order by statdate asc),2) as 环比增长
  from tmp_lxq_1 t;

 

结果:

 

求同比增长:

select t.statdate,
       t.province,
       t.premium as 当期数,
       lag(premium, 12, null) over(order by statdate asc) as 前期数,
       (t.premium - (lag(premium, 12, null) over(order by statdate asc))) /
       lag(premium, 12, null) over(order by statdate asc) as 同比增长
  from tmp_lxq_1 t;

结果:

 

总结:

使用lag和lead相对来说比表连接效率高很多,近期做的项目中很多都求同比环比,使用起来非常方便。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐