表结构:(字段为用户的交易记录:用户名称,交易时间)希望计算出同一个用户购买的时间间隔,如同一个用户的第一次购买时间和第二次购买时间间隔,当一个用户购买多余2次的时候,需要计算出第二次和第三次的时间间隔,第三次和第四次的以此类推,谢谢!!!

解决方案 »

  1.   

    SELECT
    *,DATEDIFF(dd,LAG(date)OVER(PARTITION BY USER ORDER BY date),date) as [天数]
    FROM TabName
      

  2.   

    SELECT
    *,DATEDIFF(dd,(SELECT MAX(date) FROM TabName WHERE USER=a.USER AND Date<a.Date),date) as [天数]
    FROM TabName AS a 
    SQL08之前的版本用这个
      

  3.   

    @roy_88 谢谢回复,你的两端代码我都用了,还是报错,我目前是在mysql环境下的,一直提示语法错误,您能指点一下吗?!
      

  4.   

    这是SQL SERVER版,非SQL SERVER要注明数据库类型MYSQLcreate table Tab8(user varchar(10),Date datetime);insert into Tab8 values('a','2015-01-01'),('a','2015-02-01'),('b','2016-01-01');select user,datediff(date,(select max(Date) from Tab8 where user=a.user and Date<a.Date)) from Tab8 as a ;
      

  5.   

    我可能没描述清楚,下面我详细的叙述一下,希望哪位大神给个解决方案,万分感激!如上图,第一列user是用户ID,第二列是用户支付时间,现在目的是计算用户相邻两次支付时间的时间间隔,即在同一个用户ID下,对支付日期进行排序,然后计算相邻日期之间的时间间隔。
      

  6.   

    @roy_88  首先谢谢您的帮助,按照第四种方法,我试了,结果如下:结果中很多空值,能给解释一下吗?!谢谢
      

  7.   

    同一USER没有第1条记录都会是NULL,因为没有比当前日期小的记录
      

  8.   

    @roy_88 您好,我想了半天了还是没想太明白为啥那么多空格,你方便私信留个qq之类的吗?!我把数据传给您,您帮我查看一下,非常感谢!!
    9万多行数据,计算完之后只是按照user唯一保存下来月29000多,正常应该减少没那么多,因为一个会员两两消费间隔不会削减那么厉害啊!