此处先省略二百字的废话
做报表统计的时候,常常需要在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
关联要查询的表即可