ITPub博客

首页 > 数据库 > Oracle > oracle lag()和lead()函数

oracle lag()和lead()函数

Oracle 作者:东方友诚 时间:2016-05-25 15:29:33 0 删除 编辑

Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。

这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。

  1. --exp_str要取的列  
  2. --offset取偏移后的第几行数据  
  3. --defval:没有符合条件的默认值 

  1. lag(exp_str,offset,defval) over()  
  2. Lead(exp_str,offset,defval) over() 

1.
[sql] view plain copy
  1. /*基础数据*/  
  2. select t.* from test1 t;  


2.

[sql] view plain copy
  1. /*用lag,lead分析以后的数据*/  
  2. select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name,    
  3. lead(t.name,1,0) over(order by id desc) min_v  
  4. from TEST1 t;  


3.

[sql] view plain copy
  1. /*满足查询结果的数据*/  
  2. select i.* from(select t.id, lag(t.name,1,0) over(order by id desc) max_v, t.name,    
  3. lead(t.name,1,0) over(order by id desc) min_v    
  4. from TEST1 t) i where i.name='3aa';  


另外一例
------------------------------------------

1。 select * from tache_columns


       TCH_ID COL_NAME_CN                                                     COL_VALUE
------------- -------------------------------------------------------------------------------- ------
            1 张三                                                                             10
            2 李四                                                                             21
            3 王五                                                                             23
            1 aaa                                                                              14
            1 bbb                                                                              20

2。select t.tch_id,
       t.col_name_cn,
       t.col_value,
       lead(t.col_value,1,null) over(partition by t.tch_id order by t.col_value) sal
from tache_columns t;

oracle lag()和lead()函数 - apjka_2008 - apjka_2008的博客

注:lead函数是先按tch_id分组,按col_val排序,并把当前行col_value的下一个值放到sal中,比如:

    col_value=10的下一个值是14,col_value=14 的下一个值是20。函数中的null是当没有下一个值时用null代替,当然也可以用其他值替换NULL.

3。select t.tch_id,
       t.col_name_cn,
       t.col_value,
       lag(t.col_value,1,null) over(partition by t.tch_id order by t.col_value) sal
from tache_columns t
  oracle lag()和lead()函数 - apjka_2008 - apjka_2008的博客

lag与lead相反。函数中的1是可以修改的。具体可以运行查看
4。select t.tch_id,
       t.col_name_cn,
       t.col_value,
       lag(t.col_value) over(order by t.col_value) sal
from tache_columns t

oracle lag()和lead()函数 - apjka_2008 - apjka_2008的博客
当然也可以不要partition,lag的默认参数是1

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30036720/viewspace-2106708/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-11-24

  • 博文量
    144
  • 访问量
    336908