PostgreSQL如何查询任意1个月周期内购买次数超10次的客户
需求说明
现有一张存储了1年时间范围内所有customer_id(客户ID)和order_date(下单日期)的数据表,需要统计符合以下条件的客户总数量:在任意连续1个月的周期内累计购买次数超过10次。例如:某用户在10月15日至11月15日期间共下单11次,即符合统计条件。
实现思路
- 先对每个客户的所有下单记录按日期排序,避免漏算连续周期
- 利用滑动窗口函数,对每个客户的每一笔下单记录,统计该笔订单日期往后推1个月范围内的所有下单总次数
- 筛选出任意一个窗口内下单次数≥11的客户,去重后统计总数即可
参考SQL代码(适配支持窗口函数的SQL引擎)
SELECT COUNT(DISTINCT customer_id) AS qualified_customer_count FROM ( SELECT customer_id, COUNT(*) OVER ( PARTITION BY customer_id ORDER BY UNIX_TIMESTAMP(order_date) RANGE BETWEEN CURRENT ROW AND 2592000 FOLLOWING -- 2592000为30天对应的秒数,可根据需求调整为自然月逻辑 ) AS order_count_in_1month FROM 你的表名 ) t WHERE t.order_count_in_1month > 10;
- 如果需要适配自然月(而非固定30天)的统计逻辑,可根据所用SQL引擎调整窗口函数的RANGE范围参数,替换为对应日期间隔函数即可。
内容的提问来源于stack exchange,提问作者SQL Newbie
相关产品推荐
相关产品推荐

