查询这类近多个月的数据 或者 某一具有字典含义的字段下全部数值分别对应的数据 时
时既可以在代码中实现,也可以在mysql中实现。根据实际情况选择合适的方案。
SELECT IFNULL( b.count, 0 ) AS `count`,v.`month` AS `time`
FROM
(
-- 近1个月
SELECT DATE_FORMAT( CURDATE( ), '%Y-%m' ) AS `month` UNION
-- 近2个月
SELECT DATE_FORMAT( ( CURDATE( ) - INTERVAL 1 MONTH ), '%Y-%m' ) AS `month` UNION
-- 近3个月
SELECT DATE_FORMAT( ( CURDATE( ) - INTERVAL 2 MONTH ), '%Y-%m' ) AS `month` UNION
SELECT DATE_FORMAT( ( CURDATE( ) - INTERVAL 3 MONTH ), '%Y-%m' ) AS `month` UNION
SELECT DATE_FORMAT( ( CURDATE( ) - INTERVAL 4 MONTH ), '%Y-%m' ) AS `month` UNION
-- 近N个月,N等于"INTERVAL 5 MONTH"中间的数值`5`加`1`,此处N=6
SELECT DATE_FORMAT( ( CURDATE( ) - INTERVAL 5 MONTH ), '%Y-%m' ) AS `month`
)
AS v LEFT JOIN
(
SELECT DATE_FORMAT(a.appeal_time, '%Y-%m') AS `month`,COUNT( 1 ) AS `count`
FROM qym_appeal_summary AS a
-- 计算近六个月的时间
WHERE DATE_FORMAT(a.appeal_time, '%Y-%m') > DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 6 MONTH ), '%Y-%m')
-- 补充查询匹配条件
AND one_type_name = '要素保障'
GROUP BY `month`
) AS b
ON v.`month` = b.`month`
GROUP BY v.`month`
①3~15行的主要内容A:输出近N个月的系统时间
②17~25行的主要内容B:输出查询数据在近N个月中按照月份分组后得到的结果
③将A和B之间通过时间字段关联在一起
查询结果示范: