博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL-lead&lag分析函数

Posted on 2013-07-21 21:15  数据之美  阅读(4156)  评论(0编辑  收藏  举报

    在sql 中会用到与显示前/后一行内容,或者与前/后一行值作比较,这时就可以用到lead和lag函数。

lead(arg1,arg2) arg1表示列名,arg2表示向后行偏移量,默认为1。 当找不到值时返回null 。

lag(arg1,arg2) arg1表示列名,arg2表示向前行偏移量,默认为1。 当找不到值时返回null 。

原表(tel):

id  name  tel  creatdate

1   A      001   2013-01-03

1   A      002   2013-01-10

2   B      003   2013-02-17

2   B      004   2013-02-20

例1:查询tel表中用户id、姓名、同一用户(id相同即为同一用户)的第一个号码、第二个号码、第一个号码与第二号码时间差。

        select id,name,

                 tel as tel1,lead(tel) over (partition by id order by tel) as tel2,

                 creatdate,datediff(day,creatdate,lead(creatdate) over (partition by id order by creatdate)) as diff  

        from tel 

        where tel2 is not null

        order by creatdate 

 id name  tel1   tel2     creatdate         diff

1    A      001   002   2013-01-03       7

2    B      003   004   2013-02-17       3

    lag同lead用法一致,不同点在于lead向后偏移,lag向前偏移。