MySQL查询统计今年12个月的数据,没有默认为空

此处先省略二百字的废话

做报表统计的时候,常常需要在MySQL端用sql统计近12个月的数据,或者近30天的数据。
假如遇到当月没有数据,或者当天没有数据时,默认为0。

SELECT
	CASE WHEN length(mon)= 1 THEN concat(LEFT(CURRENT_DATE, 5),'0',mon)
	ELSE concat(LEFT(CURRENT_DATE, 5), mon)
	END month
FROM 
	(SELECT @m := @m + 1 mon FROM city, (SELECT @m := 0)a )aa
LIMIT 12

@m是一个变量,随着city的表记录条数逐一递增。

(SELECT @m := @m + 1 mon FROM city, (SELECT @m := 0)a )aa语句的limit来限制条数,需要12个月就为12。注意city是一个常量表(自己数据库存在的一张表即可),只要其条数大于12即可。limit 12非常关键。
date_format(DATE_SUB(now(),INTERVAL @rownum MONTH),'%Y-%m') AS all_day语句,从现在开始,往后推7个月。

结果:
在这里插入图片描述

再使用查询出的日期数据 left join 关联要查询的表即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值