MySQL查询需求:筛选6个月前一周且后续无记录的客户数据
筛选符合特定访问/预约规则的客户数据
需求明确
要筛选出满足以下所有条件的客户:
- 最后访问时间(
Last_Seen)落在距今6个月前的一周内(即当前日期往前推180天到173天的区间) - 该周结束后,没有任何后续访问记录
- 该周结束后,没有任何预约记录(包括未来的预约)
原查询的局限
你最初写的查询只完成了第一步——过滤出目标周内有访问的客户,但没有排除那些在该周之后仍有访问或预约的客户,这会导致结果不符合预期。
修正后的完整查询
SELECT DISTINCT * FROM Clients WHERE Last_Seen BETWEEN CURDATE() - INTERVAL 180 DAY AND CURDATE() - INTERVAL 173 DAY AND Last_Seen IS NOT NULL AND Last_Seen NOT BETWEEN CURDATE() - INTERVAL 172 DAY AND CURDATE() AND (Scheduled IS NULL OR Scheduled NOT BETWEEN CURDATE() - INTERVAL 173 DAY AND NOW() + INTERVAL 365 DAY)
条件解释
核心访问时间筛选:
Last_Seen BETWEEN CURDATE() - INTERVAL 180 DAY AND CURDATE() - INTERVAL 173 DAY AND Last_Seen IS NOT NULL- 锁定那些在距今6个月前一周内有访问记录的客户,同时排除
Last_Seen为空的无效数据。
- 锁定那些在距今6个月前一周内有访问记录的客户,同时排除
排除后续访问:
Last_Seen NOT BETWEEN CURDATE() - INTERVAL 172 DAY AND CURDATE()- 确保客户在目标周结束后(从往前推172天到当前日期)没有任何访问记录,彻底过滤掉回头客。
排除后续及未来预约:
(Scheduled IS NULL OR Scheduled NOT BETWEEN CURDATE() - INTERVAL 173 DAY AND NOW() + INTERVAL 365 DAY)- 这里分两种情况:要么客户根本没有预约记录(
Scheduled IS NULL),要么所有预约都不在目标周结束后到未来一年的区间内,确保没有后续预约干扰结果。
- 这里分两种情况:要么客户根本没有预约记录(
内容的提问来源于stack exchange,提问作者Thorsverd
相关产品推荐
相关产品推荐

