SQL技术需求:统计各客户首次购买后10个月内的购买次数
解决客户首次购买后10个月内购买次数的SQL统计方案
没问题,我来帮你搞定这个统计需求!要计算每位客户首次购买后10个月内的购买次数,核心是先锁定每个客户的首次购买日期,再筛选出符合时间范围的交易记录来统计。
思路拆解
- 获取首次购买日期:通过分组+聚合函数,拿到每个客户最早的购买日期(题目已说明每位客户首次购买日期唯一,所以直接用
MIN()就能准确获取)。 - 筛选时间范围:将原交易表和首次购买日期表关联,筛选出交易日期在「首次购买日期」到「首次购买日期+10个月」之间的记录。
- 统计购买次数:按客户分组,统计符合条件的交易数量。
通用SQL代码(以SQL Server为例)
WITH FirstPurchase AS ( -- 第一步:获取每个客户的首次购买日期 SELECT Client_name, MIN(PurchaseDate) AS First_Purchase_Date FROM Transactions GROUP BY Client_name ) -- 第二步:关联筛选并统计次数 SELECT t.Client_name, COUNT(t.TransactionID) AS Purchase_Count_Within_10Months FROM Transactions t JOIN FirstPurchase fp ON t.Client_name = fp.Client_name WHERE t.PurchaseDate BETWEEN fp.First_Purchase_Date AND DATEADD(MONTH, 10, fp.First_Purchase_Date) GROUP BY t.Client_name ORDER BY t.Client_name;
不同数据库的日期函数适配
如果用其他数据库,只需要调整日期计算的函数即可:
- MySQL:把
DATEADD(MONTH, 10, ...)换成DATE_ADD(..., INTERVAL 10 MONTH) - PostgreSQL:换成
fp.First_Purchase_Date + INTERVAL '10 months' - Oracle:换成
ADD_MONTHS(fp.First_Purchase_Date, 10)
注意事项
- 关于「首次购买后」的定义:如果需求是不包含首次购买当天,只需要把
BETWEEN改成t.PurchaseDate > fp.First_Purchase_Date AND t.PurchaseDate <= [首次+10个月]即可。 - 日期格式:确保你的
PurchaseDate字段是日期类型,避免字符串格式导致的筛选错误。
样本数据的统计结果
按上述代码计算,样本数据的输出会是:
| Client_name | Purchase_Count_Within_10Months |
|---|---|
| John Lee | 1 |
| Rebort Jo | 2 |
| Tina Pe | 1 |
内容的提问来源于stack exchange,提问作者hben
相关产品推荐
相关产品推荐

