SQL查询实现同一日期仅显示单条记录并汇总当日警告错误数
问题根因
你写的SQL未实现按日期汇总,核心错误是GROUP BY的分组字段选择错误:当前语句按日志表主键id分组,每个id对应一条独立的原始日志,因此会返回所有单条日志记录,无法完成日期维度的累计统计。
修正后可直接使用的SQL
SELECT SUM(IF(bctw_error_logs.`severity_level` = '1', 1, 0)) AS Warnings, SUM(IF(bctw_error_logs.`severity_level` = '2', 1, 0)) AS Errors, DAYNAME(`log_date`) AS Day, DATE_FORMAT(`log_date`, "%M %d %Y") AS Date FROM bctw_error_logs GROUP BY DATE(`log_date`), Day, Date ORDER BY `log_date` DESC;
关键调整说明
- 移除了SELECT子句中的
bctw_error_logs.id字段:按日期做聚合统计时,单条日志的主键没有业务意义,保留该字段在MySQL开启ONLY_FULL_GROUP_BY模式时会直接抛出语法错误 - 替换分组规则:不再按单条日志id分组,改为按
log_date的日期值分组,配合你原本写好的SUM+IF条件判断逻辑,就能自动累加对应日期下的警告、错误总条数,实现每个日期仅展示1条汇总记录的需求 - 增加倒序排序规则:按日志生成时间倒序排列,最新日期的统计数据默认排在最前,符合日志类表格的常规展示习惯
如果需要实现点击对应数字查看当日明细日志的交互,只需要在WordPress前端输出层给Warnings、Errors列的数字加上对应日期的查询参数跳转即可,SQL层无需额外改动。
内容的提问来源于stack exchange,提问作者Usama Ahmed
相关产品推荐
相关产品推荐

