【发布时间】:2021-07-30 02:16:26
【问题描述】:
我有一个这样的消费表:
Account_ID | Product_ID | Date_Purchased | Amount_Purchased
1 | 57 | 05/26/20 | 14
7 | 14 | 09/18/19 | 12
45 | 104 | 08/27/20 | 3
我要做的是为每个Product_ID 查看产品可用的前 30 天(假设开始日期是给定产品消耗表中Date_Purchased 的最小值)并计算购买 >= 10 个单位 (Amount_Purchased) 的唯一 Account_IDs 的数量,以及在该 30 天窗口内活跃的唯一帐户总数(其中“活跃”表示他们在这些时间段内购买了任何东西) 30 天),这样我就可以获得在 30 天窗口内购买了至少 10 件产品的活跃账户的百分比。
我可以做这样的事情来获得每个唯一Product_ID 的 30 天窗口:
SELECT
Product_ID,
MIN(Date_Purchased) as Start_Date,
TO_CHAR(DATEADD(day, 30, Start_Date), 'YYYY-MM-DD') as End_Date
FROM consumption_table
GROUP BY Product_ID
但我正在努力解决如何在每个 30 天的窗口内过滤 Date_Purchased,然后计算活跃的不同帐户,以及购买 >= 10 个单位的帐户计数。如果我只有一个 30 天的窗口/产品要查看,我显然可以将其放入 WHERE,但我有数百个 Product_IDs。这可以使用GROUP BY 和HAVING 来完成,也可能使用CASE WHEN?对不起,如果这是一个非常基本的问题。我想要的输出看起来像这样:
Product_ID | Start_Date | End_Date | Active_During_30_Days | Purchased_10_Units | Pct
1 | 06/18/20 | 07/18/20 | 356891 | 5467 | 0.01532
非常感谢您的帮助。
【问题讨论】:
-
您的代码不是 MySQL 代码。请正确标记问题。