查询这类近多个月的数据 或者 某一具有字典含义的字段下全部数值分别对应的数据 时
时既可以在代码中实现,也可以在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之间通过时间字段关联在一起
查询结果示范: