sql(MySql)实现过去12个月的统计栏目表

问题:

        业务中需要往echarts中填充过去12个月的数据,navicat直接

SELECT DATE_FORMAT(log_t.dtime,'%Y-%m') as cale,COUNT(*) FROM log_t 
WHERE log_t.dtime BETWEEN DATE_SUB( CURRENT_DATE, INTERVAL 1 YEAR ) AND CURRENT_DATE GROUP BY grade

        得到的结果是只有部分月份的(此处数据6月按grade统计分组,有2种分组,所以有2个)

sql(MySql)实现过去12个月的统计栏目表_第1张图片

        我们希望的时能够看到有2017-08到2018-07每个月份都有,如果没有,就用0填充的效果

思路:

        ①构造一个日期表,记录每个月份

SELECT
	DATE_FORMAT( @cdate := DATE_ADD( @cdate, INTERVAL + 1 MONTH ), '%y-%m' ) AS cmonth 
FROM
	( SELECT @cdate := DATE_ADD( CURRENT_DATE, INTERVAL - 1 YEAR ) FROM log_t LIMIT 12 ) t0 
WHERE
	date( @cdate ) <= DATE_ADD( CURRENT_DATE, INTERVAL - 1 DAY ) 
sql(MySql)实现过去12个月的统计栏目表_第2张图片
        ②利用此表来实现左连接,得到效果(具体业务涉及逻辑,暂不展示)

sql(MySql)实现过去12个月的统计栏目表_第3张图片

注意:

        sql过程存在运算过程,不能放入视图,最好使用存储过程!sqlerror:1351

sql(MySql)实现过去12个月的统计栏目表_第4张图片

你可能感兴趣的:(SQL)