我有一张如下表所示的表格。它是每日特色产品和购买它们的客户的记录(类似于每日交易网站)。给定的客户每个功能只能购买一次产品,但如果多次推出,他们可能会购买相同的产品。
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
我想通过FeatureID计算购买FeatureID X的客户数量以及在之前的功能中购买相同产品ID的客户数量。
对于上表,预期结果为:
FeatureID | CountofReturningClients
1 0
2 0
3 1
4 3
理想情况下我想用SQL做这件事,但我也愿意在Excel / PowerPivot中做一些操作。谢谢!
答案 0 :(得分:1)
如果您将表格与自己联系起来,您可以找到您正在寻找的数据。请注意,因为如果表有大量数据且索引编制不好,此查询可能需要很长时间。
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
答案 1 :(得分:0)
“每项功能,计算与之前使用相同产品的功能匹配的客户”
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
答案 2 :(得分:0)
假设:您有一个名为Features的表:
FeatureID,FeatureDate,ProductID
如果没有,那么您可以随时使用临时表,cte或view创建一个。
然后:
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
答案 3 :(得分:-1)
对此有所了解,但不会有以下工作吗?
SELECT FeatureID, (CASE WHEN COUNT(clientid) > 1 THEN COUNT(clientid) ELSE 0 END)
FROM table
GROUP BY featureID