如何使用SQL查询所有主叫号码均至少拨打过一次电话的日期
问题根因
- 原有代码中
count(*)统计的是单天的总通话记录条数,同一主叫当天多次拨打会被重复计数,导致统计的cnt值高于实际当日去重主叫数量,无法和全表主叫总数匹配。
正确实现代码
核心逻辑是分组统计每个日期下的去重主叫数量,和全表去重主叫总数做对比,数值相等的日期就是符合要求的结果:
SELECT Date FROM CUSTOMER GROUP BY Date HAVING COUNT(DISTINCT CallerPhone) = (SELECT COUNT(DISTINCT CallerPhone) FROM CUSTOMER);
如果需要同时返回当日去重主叫数量可以调整SELECT部分:
SELECT Date, COUNT(DISTINCT CallerPhone) AS daily_caller_cnt FROM CUSTOMER GROUP BY Date HAVING daily_caller_cnt = (SELECT COUNT(DISTINCT CallerPhone) FROM CUSTOMER);
补充说明
这个写法比嵌套子查询的写法更简洁,COUNT(DISTINCT CallerPhone)会自动对当日相同的主叫号码去重,不会受同一主叫当日多次拨打的影响。
内容的提问来源于stack exchange,提问作者Shahir Ansari
相关产品推荐
相关产品推荐

