lag和lead函数,用于取出数据的前n行的数据和后n行的数据,当然要和over(order by)一起组合

其实这2个函数的作用非常好理解,Lead()就是取当前顺序的下一条记录,相对Lag()就是取当前顺序的上一行记录。
经常会有判断在一定条件下的两条记录之间的时间差这样的需求。
Lead()函数的用法和Lag()是一样的,所以只说明一个就可以了。
 
语法结构:
lead(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause)
参数说明:
value_expr 值表达式,通常是字段,也可是是表达式。value_expr本身不支持分析函数,也就是lead不支持多层调用。
offset 偏移,应该是很熟悉的数学概念了,或者是相对偏移,表格来开当前行的第offset行,如果offset是整数就表示是顺序下的前第n行,如果是负数就是往后第n行。 如果不提供这个参数,就是默认为1.
default 默认值,如果没有找到,应该返回什么值的意思,有点类似nvl(col,value)。如果没有设置,且找不到,那么就返回Null
over  理解成在一个结果集范围内,如果后面的partition by为空,那么就是当前的结果集范围内。
query_partition_clause  分区语句,对结果集合分区的语句,是可选的,如果没有就是所有的一个分区。
Order_by_clause 排序语句 必须需要 ,形如order by xxx desc/asc
 
用一个很简单的例子来介绍一下用法。
这里介绍的是Lag()函数,就是去上N行的字段的数据。
Sql代码  
 with tmp as(
select '' id ,'aa' name from dual union all
select '' id ,'bb' name from dual
)
select a.*,
lag(name,1) over (order by id desc) lag
from tmp a
 select * from
(
select t1.yin_name yin_name01,t2.yin_name yin_name02,t1.fluoride-t2.fluoride fluoride,t1.ysn-t2.ysn ysn,t1.jsn-t2.jsn jsn,
t1.jhsn-t2.jhsn jhsn,t1.chloride-t2.chloride chloride,t1.nitrite-t2.nitrite nitrite,t1.nitrate-t2.nitrate nitrate,
t1.wersn-t2.wersn wersn,t1.dersn-t2.dersn dersn,t1.bersn-t2.bersn bersn,t1.sulfate-t2.sulfate sulfate,
t1.yersn-t2.yersn yersn,t1.yin_date yin_date01 ,t2.yin_date yin_date02
from
(select * from zd_yinlz where instr(yin_name,'MO')=0 and instr(yin_name,'BLK')=0) t1
,
(
select t.*,lead(t.yin_date)over(order by yin_date) enddate from
(select * from zd_yinlz where instr(yin_name,'MO')>0 order by yin_date ) t
) t2
where t1.yin_date >= t2.yin_date and t1.yin_date < t2.enddate
)
union
select * from
(
select t1.yin_name yin_name01,t2.yin_name yin_name02,t1.fluoride-t2.fluoride fluoride,t1.ysn-t2.ysn ysn,t1.jsn-t2.jsn jsn,
t1.jhsn-t2.jhsn jhsn,t1.chloride-t2.chloride chloride,t1.nitrite-t2.nitrite nitrite,t1.nitrate-t2.nitrate nitrate,
t1.wersn-t2.wersn wersn,t1.dersn-t2.dersn dersn,t1.bersn-t2.bersn bersn,t1.sulfate-t2.sulfate sulfate,
t1.yersn-t2.yersn yersn,t1.yin_date yin_date01,t2.yin_date yin_date02
from
(select * from zd_yinlz where instr(yin_name,'MO')=0 and instr(yin_name,'BLK')=0) t1
,
(select * from
(select * from zd_yinlz where instr(yin_name,'MO')>0 order by yin_date desc) where rownum = 1) t2
where t1.yin_date >= t2.yin_date
)

oracle 列相减——(Oracle分析函数Lead(),Lag())的更多相关文章

  1. oracle 日期相减

    oracle日期相减2012-02-10 12:18--MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份 SQL> select months_betwe ...

  2. oracle 日期相减 转载

      转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减2012-02-10 12 ...

  3. Oracle 时间相减得出毫秒、秒、分、时、天,,【转】

    http://blog.csdn.net/redarmy_chen/article/details/7351410 oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 ...

  4. awk 两列相减

    cat http.txt  |awk -F ':' '{print($2-$3)}' 百度文库

  5. oracle列合并

    在很多场合,我们会须要用到oracle列合并,oracle提供了一些方法用于把某列的多行数据合并成一行. 一.10G曾经使用WMSYS.WM_CONCAT   wmsys.wm_concat将字段的值 ...

  6. numpy 数组相减

    a与b的每一列相减

  7. oracle 两个时间相减

    oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 为相差的小时数 oracle 两个时间相减默认的是天数*24*60 为相差的分钟数 oracle 两个时间相减默认 ...

  8. oracle的日期相减

    oracle的日期相减 : 两个date类型的 日期相减,得到的是天数,可能是带小数点的.如下:

  9. oracle两时间相减得到相差的时间

    1.months_between(date1,date2);date1和date2相减得到相差的月份. select months_between(to_date('2015-05-11','yyyy ...

随机推荐

  1. Vue.js——理解与创建使用

    Vue.js 概念:是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API,作者是尤雨溪是中国人. 优点: 1)易用 已经会了HTML,CSS,JavaScript?即刻阅读指南开始构 ...

  2. 初识numpy

    from numpy import *   导入numpy包 random可以生成随机数组 通过mat函数,将数组转换成矩阵,可以对矩阵进行求逆计算等.其中.I操作实现了矩阵求逆计算操作. 执行矩阵乘 ...

  3. Uiautomator之入门

    优点:1.可以对所有操作进行自动化,操作简单: 2.不需要对被测程序进行重签名,且,可以测试所有设备上的程序,比如~某APP,比如~拨号,比如~发信息等等    3.对于控件定位,要比robotium ...

  4. CBAM: 卷积块注意模块

    CBAM: Convolutional Block Attention Module 论文地址:https://arxiv.org/abs/1807.06521   简介:我们提出了卷积块注意模块 ( ...

  5. python----面向对象(2)

    反射 class ClassA: name = 'xiaoming' def __init__(self): self.y = 'y' #先执行 __setattr__ 在执行__getattribu ...

  6. 微信h5支付源码DEMO参考

    类库代码 wechatH5Pay.php <?php //use Flight; /** * 微信支付服务器端下单 * 微信APP支付文档地址: https://pay.weixin.qq.co ...

  7. POJ 3126 Prime Path (素数+BFS)

    题意:给两个四位素数a和b,求从a变换到b的最少次数,每次变换只能变换一个数字并且变换的过程必须也是素数. 思路:先打表求出四位长度的所有素数,然后利用BFS求解.从a状态入队,然后从个位往千位的顺序 ...

  8. asp.net core配置访问地址

    配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Program.cs里使用UseUrls()扩展方法进行设置.UseUrls()方法的参数是个字符串数组,可以同时设置 ...

  9. PHP Excel导入日期单元格处理

    PHPExcel导入Excel文件,对Excel中日期单元格处理 /** * 判断字符串是否是日期格式 * @param $date * @param $format * @return bool * ...

  10. 【Java】 剑指offer(14) 二进制中1的个数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把 ...