按月份拆分年度文件统计的SQL查询优化求助
按月份统计各类文件接收总量的正确SQL方案
我们需要统计2022年每月各类文件的接收总量,原查询仅能返回全年各类型的累计总量,之前尝试的查询因分组逻辑错误,导致按天统计而非按月。
错误原因
之前的查询中group by type, batch_date是按具体日期分组,因此会把每天的数据单独拆分统计,无法合并成月度总量;同时where子句里的month = 1'1属于语法错误。
正确查询语句
要实现按月统计,需将分组字段改为type和MONTH(batch_date),为避免跨年度月份混淆(即使本次限定2022年,加上年份也更严谨),可补充YEAR(batch_date):
SELECT type AS UC_Record_Type, COUNT(type) AS total_records, MONTH(batch_date) AS month, YEAR(batch_date) AS year -- 可选字段,明确统计年份 FROM hbucdsnotification WHERE batch_date > '31.12.2021' AND batch_date < '01.01.2023' GROUP BY type, MONTH(batch_date), YEAR(batch_date) -- 按类型+月份+年份分组 ORDER BY month, type; -- 先按月份排序,再按文件类型排序
查询结果示例
执行后会得到符合预期的月度统计结果:
UC_Record_Type total_records month year new claims 634 1 2022 changes 3898 1 2022 termination 200 1 2022 new claims 580 2 2022 changes 3670 2 2022 termination 185 2 2022
扩展:同时统计自动化处理总量
如果需要同步统计每月各类文件的自动化处理总量,假设表中有标记处理状态的字段(比如is_processed,值为1表示已完成自动化处理),可通过条件统计实现:
SELECT type AS UC_Record_Type, COUNT(type) AS total_records, COUNT(CASE WHEN is_processed = 1 THEN 1 END) AS processed_total, MONTH(batch_date) AS month, YEAR(batch_date) AS year FROM hbucdsnotification WHERE batch_date > '31.12.2021' AND batch_date < '01.01.2023' GROUP BY type, MONTH(batch_date), YEAR(batch_date) ORDER BY month, type;
内容的提问来源于stack exchange,提问作者Carl Butterworth
相关产品推荐
相关产品推荐

