SQL查询:找出近60天未产生购买行为的客户
筛选近60天未购买商品的客户SQL实现
没问题,我来帮你梳理下怎么写这个SQL语句。首先咱们得明确需求:找出所有近60天内没有任何购买记录的客户,核心思路是先确定每个客户的最后一次购买时间,再判断这个时间是否超出了60天的范围。
假设你的表名为customer_purchases,字段就是你给出的Customer_key、order_date、item,那基础版的SQL可以这么写:
SELECT Customer_key FROM ( -- 先分组获取每个客户的最后购买日期 SELECT Customer_key, MAX(order_date) AS last_purchase FROM customer_purchases GROUP BY Customer_key ) AS customer_last_purchase -- 筛选出最后购买日期在60天前的客户 WHERE last_purchase < CURRENT_DATE - INTERVAL '60 days';
补充说明:
- 不同数据库对日期运算的语法略有不同,比如:
- MySQL/MariaDB 可以把条件改成
last_purchase < DATE_SUB(CURDATE(), INTERVAL 60 DAY) - Oracle 可以改成
last_purchase < SYSDATE - 60 - SQL Server 则用
last_purchase < DATEADD(day, -60, GETDATE())
- MySQL/MariaDB 可以把条件改成
如果你的业务场景里有单独的customers客户表(记录所有存在的客户,包括从未购买过的),那更严谨的写法是左连接购买表,这样能覆盖那些从来没买过东西的客户:
SELECT c.Customer_key FROM customers c LEFT JOIN customer_purchases p ON c.Customer_key = p.Customer_key GROUP BY c.Customer_key HAVING MAX(p.order_date) < CURRENT_DATE - INTERVAL '60 days' OR MAX(p.order_date) IS NULL; -- 从未有过购买记录的客户
这个写法会把两类客户都筛选出来:一类是曾经买过但最近60天没买的,另一类是从来没买过任何商品的客户,更贴合实际业务需求~
内容的提问来源于stack exchange,提问作者vipinder
相关产品推荐
相关产品推荐

