从用户消费订单表(用户编号、订单编号、用户姓名、创建订单时间、购买时间等),查询近一年每月用户的平均消费时长。
为了方便理解,将安装如下步骤讲解:
第一步 我们先创建需要的数据表
use [3.9]
create table [消费订单表](
用户编号 int,
购买时间 date)
insert into [消费订单表] values
(‘1′,’20160602’),
(‘1′,’20160607’),
(‘2′,’20160602’),
(‘2′,’20160605’),
(‘2′,’20160612’),
(‘3′,’20160605’),
(‘3′,’20160608’),
(‘4′,’20160609’),
(‘4′,’20160612’)
drop table [消费订单表]
select * from [消费订单表]第二步 实现Row Number OVER Partition或者是说Rank OVER Partition的方法
SELECT * ,Row_Number() OVER (partition by 用户编号 ORDER BY 购买时间 asc) rank INTO [temp_11] from [消费订单表] select * from [temp_11] select *,rank-1 rank_1 INTO [temp_12] from (SELECT * ,Row_Number() OVER (partition by 用户编号 ORDER BY 购买时间 Asc) rank from [消费订单表])a select * from [temp_12]
第三步 查询下次购买时间
select [temp_11].用户编号,[temp_11].购买时间,[temp_12].购买时间 下次购买时间 INTO [temp_13]
from [temp_11]
left join [temp_12]
on [temp_12].rank_1=[temp_11].rank
and [temp_12].用户编号=[temp_11].用户编号
where [temp_12].购买时间 is not null
select * from [temp_13]第四步 计算二次购买间隔时间
select AVG(DATEDIFF(day,购买时间,下次购买时间)) from [temp_13]