Oracle如何查询客户同一日在不同门店产生多笔消费的记录
解决思路
要实现「同一天内至少2笔消费来自不同门店」的过滤,只需在原有逻辑基础上做两处调整:
- 子查询分组后,通过
COUNT(DISTINCT PurShopId) >= 2校验同一个客户同一天的消费是否来自不同门店,该条件已经隐含了消费笔数≥2的要求,无需重复校验消费笔数(如果有额外的笔数要求可以叠加条件) - 完善主表和子查询的关联规则,新增日期维度的匹配,避免同一个客户其他日期的消费被误关联进结果
- 注意原SQL中子查询的表名写为
Purchases,如果和主表Purchase是同一张表需要统一表名,避免执行报错
修正后的查询语句
SELECT p.PurClientId, p.PurDate, p.PurId, p.PurShopId -- 可根据需要选择是否展示门店ID字段 FROM Purchase p INNER JOIN ( SELECT PurClientId, to_date(PurDate) AS pur_date_day FROM Purchase GROUP BY PurClientId, to_date(PurDate) -- 核心过滤条件:同一天内消费涉及至少2家不同门店 HAVING COUNT(DISTINCT PurShopId) >= 2 ) k ON k.PurClientId = p.PurClientId AND to_date(p.PurDate) = k.pur_date_day;
如果业务需要同时满足更高的笔数要求,比如同一天至少3笔消费、且来自至少2家不同门店,只需修改HAVING子句叠加条件即可:
HAVING COUNT(DISTINCT PurShopId) >= 2 AND COUNT(PurId) >= 3
内容的提问来源于stack exchange,提问作者Alexandra
相关产品推荐
相关产品推荐

