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相对来说比表连接效率高很多,近期做的项目中很多都求同比环比,使用起来非常方便。

Oracle函数lag和lead详解相关推荐

  1. oracle lead_lag wm_concat,oracle函数 lag()和lead()

    [语法] lag(EXPR,,) LEAD(EXPR,,) [功能]表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的) lead () 下一 ...

  2. mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回 ...

  3. 窗口函数_LAG()与LEAD() 详解

    转载自:Hive 窗口函数lead 和 lag(39) 补充:HIVE_HIVE函数_窗口函数_LAG()/LEAD() 详解 lead 和 lag 前面我们学习的first_value和last_v ...

  4. php。defined,PHP defined()函数的使用图文详解

    PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...

  5. oracle数据库中索值,Oracle数据库中的索引详解

    Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...

  6. oracle out参数查询,Oracle的out参数实例详解

    Oracle的out参数实例详解 一 概念 1.一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值:而存储过程没有返回值. 2.过程和函数都可以通过out指定一个或多个输出行.我们可以利用 ...

  7. oracle的userenv和nls_lang详解

    oracle的userenv和nls_lang详解 1.userenv最常见的使用 userenv函数返回当前会话(session)的相关信息.以下sql语句可以查询当前会话连接的数据库字符集 sel ...

  8. oracle select执行顺序,oracle select执行顺序的详解

    oracle select执行顺序的详解 SQL Select语句完整的执行顺序:1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子 ...

  9. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

最新文章

  1. 冒泡排序_python实现冒泡排序
  2. 设计模式-建造者模式(05)
  3. AttributeError: module 'tensorflow' has no attribute 'random_normal'
  4. 一刻钟精通正则表达式
  5. python【Matlibplot绘图库】利用matlibplot绘制雷达图
  6. valgrind的使用
  7. Linux 下五款出色的流媒体客户端
  8. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)
  9. C语言选择排序Selection sort算法(附完整源码)
  10. C语言程序设计 | 指针的进阶(一):字符指针、数组指针、指针数组、函数指针
  11. kafka分区及副本在broker的分配
  12. 阻塞非阻塞,同步异步四种I/O方式
  13. 产品经理高质量产物的五步思维法
  14. 学会asp后再学php,九天学会ASP 之 第二天
  15. 300G的python资料等着你
  16. 安卓开发3d模型展示源码_Android(安卓)全套开发资料视频+源码
  17. bandizip关闭自动更新提示的方法步骤
  18. 广通优云徐育毅:做中国的ServiceNow
  19. 树莓派有些WIFI连接不上
  20. 洛谷 P2142 高精度减法

热门文章

  1. Notion 公开页面启用Dark mode
  2. python怎么绘制macd
  3. linux快速还原oracle,linux系统还原oracle数据库
  4. vk32xx linux,将自己的驱动加到内核
  5. 服务器上怎样开启sql远程,如何开启SqlServer 远程访问详解(图文并茂)
  6. 解决www 54kk com/baidu劫持浏览器的问题
  7. node.js+uniapp计算机毕业设计安卓基于Android的线上水果店(程序+APP+LW)
  8. 微信小程序echart图
  9. Unity3D入门 第陆章: 贴两个材质玩玩
  10. NVDLA学习笔记(1)