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


猜你喜欢

转载自blog.csdn.net/hongchangfirst/article/details/79752881