SQL中LAG和OVER函数的意义

做BI查询时,有时会需要看上一条纪录的情况,那么需要怎么做呢?现代的数据仓库系统或者RDBMS系统一般都会提供一个一个函数来供你分析上几条或下几条的数据。比如LAG和LEAD。

LAG( shorten_url IGNORE NULLS ) OVER ( PARTITION BY hit_day, session_id ORDER BY click_id )  


Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

Parttion by 关键字是Oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,儿聚合函数一般只有一条反映统计值的结果。

lead(列名,n,m):  当前记录后面第n行记录的<列名>的值,没有则默认值为m;如果不带参数n,m,则查找当前记录后面第一行的记录<列名>的值,没有则默认值为null。

lag(列名,n,m):  当前记录前面第n行记录的<列名>的值,没有则默认值为m;如果不带参数n,m,则查找当前记录前面第一行的记录<列名>的值,没有则默认值为null。


LAG的意思Lag()就是取当前顺序的上一行记录。结合over就是分组统计数据。

很多时候查询结果上下行其实是相同事物不同发展状态下的结果,比较两种结果最简单的方法就是加减乘除,但是上下两行在数据表格中不好操作,利用Lag函数将其下移就可以同行相减等。所以与Lag常常合起来用的partition by就是分组按你的条件将你规定相同的东西分成同类。

详细文档:https://docs.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql

原文:http://blog.csdn.net/hongchangfirst/article/details/79752881

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值