我在MS SQL服务器表中有百万条记录:
user1,product1,0
user1,product2,time1
user1,product3,time2
user1,product4,time3
user2,product3,0
user2,product2,time4
user3,product4,0
user3,product5,time5
表示用户在不同时间购买产品。第3列是购买时间,当值为0时,表示这是第一次购买此用户,假设一次使用只会在第一时间购买一件商品。
time1,time2,time3等只是第一次购买和当前购买时间之间的时差。
现在我需要将其概括为:
十大常见购买对(产品,以下购买产品)以及有多少不同的用户符合此模式。
结果对可能看起来像。
(product1,product2)
and (product1,product5)
and (product2,product5)
....
如何在SQL中实现这一点?非常感谢
答案 0 :(得分:1)
试试这个:
declare @temp table (product1 varchar, product2 varchar, user_count int)
insert into @temp (product1, product2, user_count
select pr1.product, pr2.product, count(distinct userid)
from
purchases pr1
inner join purchases pr2 on pr1.UserId = pr2.UserId and pr1.Time < pr2.Time
group by
pr1.product,
pr2.product
select top 10 * from @temp order by user_count desc