之前写过一遍文章,记录了Mysql统计近30天的数据,无数据填0的方式。主要思路就是利用mysql中的函数,生成一列30天的日期格式的数据,在通过这张临时表的数据去左关联我们的业务数据,由于用的是左关联,所以30天的数据肯定是有的,和业务数据关联后,业务数据中没有该日期的数据,就会得到null的结果,我们在通过使用IFNULL函数,就实现了这个需求。原文地址: Mysql统计近30天的数据,无数据的填充0_lsqingfeng的博客-CSDN博客_mysql统计30天内的数据
而最近在做统计分析的时候,遇到了一个统计近6个月的数据需求。当时我这一看,这不是和我之前做的统计近30天的数据的需求差不多么,就准备照搬过来,但是却发现整体思路是一致的,但是生成这个近六个月的数据,有点不知所措。后来终于还是找到了解决方案,这里和大家分享一下。
核心思路还是要生成近6个月的月份数据。
SELECT
date_format( @lastDay := last_day( date_add( @lastDay, INTERVAL 1 MONTH ) ), '%Y-%m' ) lastDays
FROM
( SELECT @lastDay := date_add( curdate( ), INTERVAL - 6 MONTH ) FROM mysql.help_topic LIMIT 6 ) a
得到的结果如下:
有了近6个月的数据,我们就可以进行业务数据的关联了。,整体思路和之前一样
select date_table.lastDays as monthValue,IFNULL(temp.count, 0 ) as eventCount from
(
SELECT
date_format(@lastDay := last_day( date_add(@lastDay,interval 1 month ) ) ,'%Y-%m' ) lastDays
from
(SELECT @lastDay := date_add(curdate(),interval -6 month) from mysql.help_topic limit 6) a ) date_table
left join(
select DATE_FORMAT(event.event_time,'%Y-%m') as monthValue, round(count(*)/10000,2) as count from tbl_province_event event GROUP BY DATE_FORMAT(event.event_time,'%Y-%m')
)temp on temp.monthValue = date_table.lastDays
结果如下: