遇到一个需求:
查询最近12个月的数据(某个月的数据可能为空,但是查出来应该是该月数据为0)
SELECT '本年度事项趋势' as type, a.year AS YEAR ,a.month AS MONTH, b.unit as unit ,num as num FROM(
/*过去12个月的日期格式*/
SELECT DATE_FORMAT(CURDATE() , '%Y') AS `year`,DATE_FORMAT(CURDATE(), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 1 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 1 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 2 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 2 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 3 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 3 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 4 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 4 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 5 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 5 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 6 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 6 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 7 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 7 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 8 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 8 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 9 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 9 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 10 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 10 MONTH), '%m') AS `month`
UNION SELECT DATE_FORMAT(CURDATE()-INTERVAL 11 MONTH, '%Y') AS `year`, DATE_FORMAT((CURDATE() - INTERVAL 11 MONTH), '%m') AS `month`
)a
left join (
select '本年度事项趋势' as type, DATE_FORMAT(t1.acceptance_time,'%Y') AS YEAR ,month(t1.acceptance_time) AS MONTH, t1.company_name as unit ,count(1)as num
from t_matter_manage t1
where
DATE_FORMAT(acceptance_time,'%Y-%m') > DATE_FORMAT(date_sub(curdate(), interval 12 month),'%Y-%m') and t1.matter_status in('BLZ''BJSQ''BJFH','YQSQ','YBJ')
group by DATE_FORMAT(t1.acceptance_time,'%Y') ,month(t1.acceptance_time), t1.company_name
)b
on
a.month=b.month and a.year=b.year
备注:查询出的是2023年09月这种形式,
如果需要查询出2023年9月的形式,将%m替换成%c即可
2、查询某年1-12个月
select year(now()) as year,1 as month
union select year(now()) as year,2 as month
union select year(now()) as year,3 as month
union select year(now()) as year,4 as month
union select year(now()) as year,5 as month
union select year(now()) as year,6 as month
union select year(now()) as year,7 as month
union select year(now()) as year,8 as month
union select year(now()) as year,9 as month
union select year(now()) as year,10 as month
union select year(now()) as year,11 as month
union select year(now()) as year,12 as month