我有一个数据表,其中包含标准yyyy-mm-dd格式的列user_id
,purchase_date
和date
列。
此表中的用户在同一个月内购买同一产品(和不同产品)的多个项目,因此我需要能够在他们第一次购买特定产品时捕获,然后按月计算每个产品。 / p>
我用以下方法做到了:
SELECT yr, mo, COUNT(DISTINCT(CASE WHEN Product = 'product_a'
THEN user_id)) AS product_a
FROM
(
SELECT YEAR(min(purchase_date)) AS yr, MONTH(min(pruchase_date)) AS mo,
DAY(min(purchase_date)) AS dy, user_id, Product
FROM daily_purchases
GROUP BY user_id, Product
) b
GROUP BY yr, mo
ORDER BY yr, mo
这似乎工作正常并捕捉我正在寻找的东西。有没有人有任何建议 - 或者这是最合适的方式吗?谢谢!
答案 0 :(得分:0)
我没有任何要测试的源数据...但是这里是我接近它的方式......这可能需要一些调整,因为我没有用源数据测试它:
Select [yr], [mo], [user_id], [firstBuy], [cntBuys] From
(
SELECT [yr], [mo], [user_id],
ROW_NUMBER() over (partition by user_id order by purchase_date) as 'firstBuy'
,COUNT(*) over (partition by user_id, Product) as 'cntBuys'
FROM daily_purchases
) a
Where a.firstBuy = 1
Group by a.yr, a.mo