标记用户对产品的第一次观察

时间:2016-05-03 12:37:21

标签: sql sql-server tsql

我有一个数据表,其中包含标准yyyy-mm-dd格式的列user_idpurchase_datedate列。

此表中的用户在同一个月内购买同一产品(和不同产品)的多个项目,因此我需要能够在他们第一次购买特定产品时捕获,然后按月计算每个产品。 / 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

这似乎工作正常并捕捉我正在寻找的东西。有没有人有任何建议 - 或者这是最合适的方式吗?谢谢!

1 个答案:

答案 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