mysql套用:查询近N个月的数据,没有数据的月份补0

查询这类近多个月的数据 或者 某一具有字典含义的字段下全部数值分别对应的数据 时

时既可以在代码中实现,也可以在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之间通过时间字段关联在一起

查询结果示范:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值