利用复杂sql处理不规则月份数据统计

问题:生产报表大多为上月26日到本月25日为本月数据,12月的数据为上月26日到12月31日。要求按月统计数据。每月下面还会有各个产品分组统计。

在生产报表中每天会有很多的数据产生,报表中还要统计各个产品的数据,即便是聚合计算,每天也会有很多条记录,假设每天有一百条纪录,如果统计时间段为三个月,总体数据量为9000条记录,如果将9000条记录抽取到报表中,然后通过报表的函数处理各个月份的数据,这样效率很低,而且要编写复杂的过滤条件,尤其12月份的时候条件还不一致。

建议采用sql中的case……when的方式处理。sql语句如下:

case month(contact_time)
when 12
then
convert(char(7),contact_time,111)
else
convert(char(7),dateadd(MM,1,dateadd(dd,-25,contact_time)),111)
end
as year_month

sql的逻辑为:

当12月的时候直接取年月,否则取日期字段减去25天然后加上1个月,这样除12月之外的各个月份都是从上月的26日开始到本月的25日结束。

这样就能将数据库表中日期字段处理成需要的年和月,到报表中按照年月统计就很容易了。

本文标签: