lead和lag函数

lag和lead函数,用于取出数据的前n行的数据和后n行的数据,当然要和over(order by)一起组合
select id,name from dave
id name
4 SF
3 oracle
4 eygle
5 rman
4 export
dave表中有id和name的数据。lag函数是取出数据的前n行的数据,lead函数是取出数据的后n行的数据,直接在例子吧,简单明了
select id,name,lag(id,4) over (order by id) as v_ab from dave
id name v_ab
3 oracle
4 export
4 SF
4 eygle
5 rman 3
lag(id,n,values)才是整个lag的完整形式,其中的id是column_name,n就是前n行的,values就是缺省的值,如果省略n和values,默认n是1,values是null
其实完全可以理解n就是当前行的前n行的数据,如果有就显示,没有就显示values或者null值。上面的结果也可以解释了。
lag函数后有个over(order by id)其中的order by让数据重新asc排序了,所以lag函数是必须建立在order by的情况下,当然也可以order by name,不过最后显示的结果都是先order by然后对其lead或者lag的n行
当然lead函数和lad基本一样,不同的是一个是前n行一个是后n行
select id,name,lead(id,4) over(order by id) as v_ab from dave
3 oracle 5
4 export
4 SF
4 eygle
5 rman
select id,name,lead(id,4) over(order by 1) as v_ab from dave
上面的order by 1对吗,有结果吗,对的也是有结果的。
select id,name from dave order by 2 排序了
ORDER BY 项必须是 SELECT-list 表达式的数目,也就是前面的select column的列的总数范围内。
select id,name from dave order by 3,此时oracle就会报错了,因为无法排序找不到第三列column。
但是下面的
select id,name,lead(id,4) over(order by id) as v_ab from dave,此时查看sql执行计划是有window sort的排序计划,windows sort是一个窗口数据的排序,执行效率比全局sort order by要高。
现在就关于order by的讨论就到这了,想用lead但是又不想通过order by来改变lead的值,就直接select id,name,lead(id,4) over(order by 1) as v_ab from dave。
当然总结归总结,还是要多用,oracle就是一个不断学习不断否定自己坚定自己的过程吧!别的也一样吧!再次感谢大家对俺的啰嗦!

[@more@]

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

转载于:http://blog.itpub.net/25362835/viewspace-1053127/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值