2011-12-13 87 views
0

我有千万条记录的MS SQL Server表:如何找到最常见的模式

user1,product1,0 
user1,product2,time1 
user1,product3,time2 
user1,product4,time3 
user2,product3,0 
user2,product2,time4 
user3,product4,0 
user3,product5,time5 

这意味着在不同的时间用户puchase产品。第3列是购买时,当该值是0时,这意味着它是第一次购买此用户的,假定一个使用港岛线仅在第一次购买一个项目。

时间1,时间2,时间3等就在首次购买和目前购买时间之间的时间差。

现在我需要总结它:

前10共同购买作为对(产品,以下购买产品),以及有多少不同用户适应这种模式。

结果对可能看起来像。

(product1,product2) 
and (product1,product5) 
and (product2,product5) 
.... 

SQL中如何实现这一点?非常感谢

+2

你尝试过什么?如果你想按代码做代码,那么你应该聘请一名顾问。堆栈溢出是针对特定问题的帮助。 – JNK 2011-12-13 20:22:11

+0

这是功课吗?如果是,请添加`家庭作业`标签。 – kol 2011-12-13 20:39:03

回答

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