如何修正SQL查询,按日期与send_id统计每日id计数?
修正后的查询方案
你的问题出在GROUP BY子句的分组维度错误:虽然SELECT里用DATE(date)提取了日期,但GROUP BY仍然使用原始的date列(datetime类型),这会导致同一日期同一send_id下,不同时间戳的记录被单独分组,从而出现多行拆分的情况。
正确的查询语句
SELECT DATE(date) AS `date`, send_id, COUNT(id) AS id_count FROM `table1` WHERE date >= '2024-09-01' AND date < '2024-10-01' GROUP BY DATE(date), send_id;
关键修正点
- GROUP BY匹配SELECT的日期维度:把GROUP BY里的
date替换为DATE(date),确保分组逻辑和SELECT中提取的日期一致,这样同一日期同一send_id的记录会被合并统计。 - 优化日期筛选条件:原查询中
BETWEEN '2024-09-01%' AND '2024-09-30%'的写法不符合datetime类型的筛选规范,改用date >= '2024-09-01' AND date < '2024-10-01'可以更精准地覆盖9月的所有时间,避免遗漏或错误匹配。
如果你的数据库支持在GROUP BY中使用SELECT的别名(比如MySQL),也可以简化为:
SELECT DATE(date) AS `date`, send_id, COUNT(id) AS id_count FROM `table1` WHERE date >= '2024-09-01' AND date < '2024-10-01' GROUP BY `date`, send_id;
内容的提问来源于stack exchange,提问作者John Beasley
相关产品推荐
相关产品推荐

