SQL:如何计算已购买相同产品的客户端数量?

我有一张桌子,就像下面这张桌子一样。 这是每日特色产品和购买它们的客户(类似于每日交易网站)的logging。 一个给定的客户只能每个function一次购买一个产品,但是如果多次显示,他们可能会购买相同的产品。

FeatureID | ClientID | FeatureDate | ProductID 1 1002 2011-05-01 500 1 2333 2011-05-01 500 1 4458 2011-05-01 500 2 8888 2011-05-10 700 2 2333 2011-05-10 700 2 1111 2011-05-10 700 3 1002 2011-05-20 500 3 4444 2011-05-20 500 4 4444 2011-05-30 500 4 2333 2011-05-30 500 4 1002 2011-05-30 500 

我想按functionID计算购买functionID X和谁在以前的function购买相同的产品ID的客户端的数量。

对于上面的表格,预期的结果是:

 FeatureID | CountofReturningClients 1 0 2 0 3 1 4 3 

理想情况下,我想用SQL做到这一点,但也可以在Excel / PowerPivot中进行一些操作。 谢谢!!

如果您将自己的表join自己,则可以find要查找的数据。 要小心,因为这个查询可能需要很长时间,如果表中有大量的数据,并没有很好的索引。

 SELECT t_current.FEATUREID, COUNT(DISTINCT t_prior.CLIENTID) FROM table_name t_current LEFT JOIN table_name t_prior ON t_current.FEATUREDATE > t_prior.FEATUREDATE AND t_current.CLIENTID = t_prior.CLIENTID AND t_current.PRODUCTID = t_prior.PRODUCTID GROUP BY t_current.FEATUREID 

“每个function,计数与同一产品的任何早期function相匹配的客户”

 SELECT Curr.FeatureID COUNT(DISTINCT Prev.ClientID) AS CountofReturningClients --edit thanks to feedback FROM MyTable Curr LEFT JOIN MyTable Prev WHERE Curr.FeatureID > Prev.FeatureID AND Curr.ClientID = Prev.ClientID AND Curr.ProductID = Prev.ProductID GROUP BY Curr.FeatureID 

假设:你有一个叫做Features的表格:

FeatureID,FeatureDate,ProductID

如果没有,那么你总是可以创build一个临时表,cte或视图。

然后:

 SELECT FeatureID , ( SELECT COUNT(DISTINCT ClientID) FROM Purchases WHERE Purchases.FeatureDate < Feature.FeatureDate AND Feature.ProductID = Purchases.ProductID ) as CountOfReturningClients FROM Features ORDER BY FeatureID 

新的这个,但不会下面的工作?

 SELECT FeatureID, (CASE WHEN COUNT(clientid) > 1 THEN COUNT(clientid) ELSE 0 END) FROM table GROUP BY featureID