有一个表记录了每个会员的消费时间,如下,有的会员消费了N次,有的会员只消费过一次,现在要求出每个会员每次消费时间间隔,这里测试的是SQL Server2012数据库,postgreSQL和Hive一样可以用。
SQL:
select *,LEAD(purtime, 1, 0)over(partition by userid order by purtime) as lastpurtime from #test
order by userid,purtime
这里用开窗函数Lead()来实现, LEAD(col, n, 0) 窗口内下n行值(后两个参数可以省略、第三个参数是 超出记录窗口时的默认值),如果想看上n行可以用lag函数,具体用法可以看我另一篇博客hive使用技巧:把很多小文件导入一张表中、显示在文件中位置和行数等,查询结果如下,可以看到已经新增了一列下次消费时间了。
求时间间隔,只需要用datediff函数即可,再套一个avg函数就是平均消费时间间隔了