求最近的几年和几月 sql

遇到一个需求:

查询最近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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值