PostgreSQL技术需求:筛选近2个月未到访的客户
获取近2个月未到访客户的PostgreSQL解决方案
嘿,我来帮你搞定这个需求!你要的是近2个月没有任何到访记录的客户详情,对吧?现在你的查询能拿到2个月前的到访数据,但还需要把这段时间内有过到访的客户彻底排除掉。下面给你两种实用的实现思路,都是基于你现有SQL的关联逻辑调整的:
方法1:使用NOT EXISTS子查询(推荐,性能通常更优)
这种方法直接检查客户在近2个月内有没有到访记录,没有的就保留下来:
SELECT usr.name, usr.mobile FROM public.user usr JOIN user_store_mapper usm ON usr.user_id = usm.user_id WHERE NOT EXISTS ( -- 子查询:验证该客户近2个月是否存在到访记录 SELECT 1 FROM invoice_header_view ihv WHERE ihv.partner_id = usm.partner_id AND ihv.create_date >= CURRENT_DATE - INTERVAL '2 months' ) -- 如果user_store_mapper存在重复的客户-门店关联,添加DISTINCT去重 -- DISTINCT usr.name, usr.mobile
方法2:使用LEFT JOIN + IS NULL
这种方法通过左关联到访记录,筛选出没有匹配到记录的客户:
SELECT usr.name, usr.mobile FROM public.user usr JOIN user_store_mapper usm ON usr.user_id = usm.user_id LEFT JOIN invoice_header_view ihv ON ihv.partner_id = usm.partner_id -- 仅关联近2个月内的到访记录 AND ihv.create_date >= CURRENT_DATE - INTERVAL '2 months' -- 没有匹配到访记录的客户,就是我们需要的目标群体 WHERE ihv.partner_id IS NULL
几个关键注意点:
- 确认
ihv.create_date确实是记录客户到访时间的字段,如果不是,记得替换成对应的时间列 - 如果需要精确到时分秒的时间范围,把
CURRENT_DATE换成NOW() - 如果
user_store_mapper里同一个客户关联了多个门店,建议添加DISTINCT避免输出重复的客户记录
内容的提问来源于stack exchange,提问作者Fida
相关产品推荐
相关产品推荐

