lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数我们可以取到当前行列的偏移N行列的值 lag可以看着是正的向上的偏移 lead可以认为负的向下的偏移 具体我们来看几个例子:

我们先看下scott的emp表的两列数据:
select deptno, sal from scott.emp order by deptno
DEPTNO SAL
10 2450.00
10 5000.00
10 1300.00
20 2975.00
20 3000.00
20 1100.00
20 800.00
20 3000.00
30 1250.00
30 1500.00
30 1600.00
30 950.00
30 2850.00
30 1250.00
ok那现在比方我有个这样的需求(我们只看sal列)我想问你2450的上一个值是多少?回答是没有 那5000的上一个值是多少?是:2450 1300的上一个值是多少呢?是:5000 Ok以此类推我想得到当前值的上一个值
就像:2450      xxx(xxx代表空)--这个值是前一列的上一个值
      5000.00 2450
      1300.00 5000
      2975.00 1300
      3000.00 2975
      1100.00 3000
      ...       ...
      1250.00   2850
OK就这样的需求 那我们现在用SQL应该如何写呢?是的你猜对了就是用lag分析函数:
select deptno, sal a, lag(sal, 1, sal) b over(order by deptno)
  from scott.emp
DEPTNO A B
10 2450.00 2450 --ps:这里的之所以是2450是因为lag(sal, 1, sal)我让它给了他本身的值
10 5000.00 2450
10 1300.00 5000
20 2975.00 1300
20 3000.00 2975
20 1100.00 3000
20 800.00 1100
20 3000.00 800
30 1250.00 3000
30 1500.00 1250
30 1600.00 1500
30 950.00 1600
30 2850.00 950
30 1250.00 2850
是的就这么简单你看出A列与B列之间有何联系了吧 相对A列B列是她的上一个值
关于lead她就刚好与lag相反了
select deptno, sal a, lead(sal, 1, sal) over(order by deptno) b
  from scott.emp
DEPTNO A B
10 2450.00 5000
10 5000.00 1300
10 1300.00 2975
20 2975.00 3000
20 3000.00 1100
20 1100.00 800
20 800.00 3000
20 3000.00 1250
30 1250.00 1500
30 1500.00 1600
30 1600.00 950
30 950.00 2850
30 2850.00 1250
30 1250.00 1250
相对A列B列是她的下一个值
另外那个偏移值1是可以随便取的如果是2那就是偏移两个值了
select deptno, sal a, lag(sal, 2,null) over(order by deptno) b
  from scott.emp
DEPTNO A B
10 2450.00      --注意这里是null空了
10 5000.00
10 1300.00 2450  --A列1300的上两个值是多少?2450是吧
20 2975.00 5000
20 3000.00 1300
20 1100.00 2975
20 800.00 3000
20 3000.00 1100
30 1250.00 800
30 1500.00 3000
30 1600.00 1250
30 950.00 1500
30 2850.00 1600
30 1250.00 950
OK 那其实lag,lead还可以加上分组偏移的
select deptno,
       sal a,
       lag(sal, 1, null) over(partition by deptno order by deptno) b
  from scott.emp
DEPTNO A B
2450.00
10 5000.00 2450
10 1300.00 5000
2975.00
20 3000.00 2975
20 1100.00 3000
20 800.00 1100
20 3000.00 800
1250.00
30 1500.00 1250
30 1600.00 1500
30 950.00 1600
30 2850.00 950
30 1250.00 2850
注意deptno不同的分组间的临界值你看明白了吧

oracle lag与lead分析函数简介的更多相关文章

  1. Oracle下lag和lead分析函数

    [转自] http://blog.csdn.net/thinkscape/article/details/8290894 Lead和Lag分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag) ...

  2. ORACLE lag()与lead() 函数

    一.简介 lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤.这种 ...

  3. (014)每日SQL学习:oracle下lag和lead分析函数

    /*语法*/ lag(exp_str,offset,defval) over() Lead(exp_str,offset,defval) over() --exp_str要取的列 --offset取偏 ...

  4. Oracle 分析函数之 lag和lead

    Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列. 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率. /*语法*/   ...

  5. ORACLE lag,lead

    oracle中想取对应列前几行或者后几行的数据时可以使用lag和lead分析函数 lag:是滞后的意思,表示本行数据是要查询的数据后面,即查询之前行的记录. lead:是领队的意思,表示本行数据是要查 ...

  6. oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)

    LAG()和LEAD()统计函数能够在一次查询中取出同一字段的前N行的数据和后N行的值.这样的操作能够使用对同样表的表连接来实现,只是使用LAG和 LEAD有更高的效率.下面整理的LAG()和LEAD ...

  7. oracle中LAG()和LEAD()以及over (PARTITION BY)

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

  8. oracle 10g函数大全--分析函数

    oracle分析函数--SQL*PLUS环境 一.总体介绍 12.1 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达 ...

  9. Oracle SQL高级编程——分析函数(窗口函数)全面讲解

    Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...

随机推荐

  1. Win7 x64 Eclipse无法识别手机 / adb interface有黄色感叹号,无法识别

    今天公司停电,因此把安卓项目带回宿舍做.宿舍的笔记本,装的是Win7 x64,手机连上电脑后,windows可以识别,但Eclipse的DDMS中却无法识别,什么都没有: 然后打开设备管理器查看,发现 ...

  2. MyBatis中的条件判断单引号双引号的使用

    对于字符串判断, <if test="aIn != 'A'" >会出现问题,系统会试图把'A'转成数字,改为 <if test='aIn != "A&q ...

  3. HTML 颜色名

    目前所有浏览器都支持以下颜色名. 141个颜色名称是在HTML和CSS颜色规范定义的(17标准颜色,再加124).下表列出了所有颜色的值,包括十六进制值.  提示: 17标准颜色:黑色,蓝色,水,紫红 ...

  4. abstract、override、new、virtual、sealed使用和示例

    abstract修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽象类,则这个类智能是其他某个类的基类.抽象方法在抽象类中没有函数体.抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽 ...

  5. Canvas arcTo绘制圆弧

    arcTo(x1,y1,x2,y2,r); 当前点x0,y0;圆弧与(x0,y0-x1,y1)相切,与(x1,y1-x2,y2)相切: <!DOCTYPE html> <html l ...

  6. 【python基础】之元组 集合 字典

    元组 元组:元组和列表类似.但是元组中的元素是固定的(不能给一个元组添加,删除和替换元素以及重新排序) 1.创建元组 t1 = () #创建一个空元组 t2 = (1, 2, 3) t3 = tupl ...

  7. 【初码干货】关于.NET玩爬虫这些事

    这几天在微信群里又聊到.NET可以救中国但是案例太少不深的问题,我说.NET玩爬虫简直就是宇宙第一,于是大神朱永光说,你为何不来写一篇总结一下? 那么今天就全面的来总结一下,在.NET生态下,如何玩爬 ...

  8. 给Ubuntu 16.04更换更新源

    给自家的Ubuntu下载软件速度有点慢,毕竟是从国外下载软件,就想更换到国内比较好的更新源(就是这些软件所在的服务器),一般直接百度Ubuntu更新源就能出来一大堆,这时候最好是找和自己Ubuntu版 ...

  9. JavaScript Window.document对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById(&qu ...

  10. PHP面向对象——GD库实现图片水印和缩略图

    今天的实现目标就是使用GD库完成对图片加水印和图 片缩略图两个功能 动身前逻辑准备 属性: 路径 功能: 构造方法 生成水印的方法 获取 图片信息 获取位置信息(123 456 789) 创建图片资源 ...