mysql按月查询统计(统计近12个月的项目个数)

mysql按月查询统计,没有数据的填充为0

1.获取过去12个月所有的月份

SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), %Y-%m) AS `month`
UNION 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 SELECT DATE_FORMAT((CURDATE() - INTERVAL 5 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 6 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 7 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 8 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 9 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 10 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 11 MONTH), %Y-%m) AS `month`
UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 12 MONTH), %Y-%m) AS `month`

运行结果: 2.把上面的月份与显示数据进行关联查询

-- 统计近12个月的项目个数(project 表没有的月份补齐)
select d.`month`,count(p.id) as `count`
from(
  SELECT DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), %Y-%m) AS `month`
	UNION 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 SELECT DATE_FORMAT((CURDATE() - INTERVAL 5 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 6 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 7 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 8 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 9 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 10 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 11 MONTH), %Y-%m) AS `month`
	UNION SELECT DATE_FORMAT((CURDATE() - INTERVAL 12 MONTH), %Y-%m) AS `month`
	)d
	left join project p on DATE_FORMAT(p.plan_start_date, %Y-%m)=d.`month`
	group by month

运行结果:

经验分享 程序员 微信小程序 职场和发展