mysql如何查询近三个月每周的数据量,查询近一年每个月的数据量?

1、查询出的数据用于画折线图
2、查询近三个月,按13周计算每周的数据量,查询近一年每个月的数据量,按每个月30天计算

SELECT * FROM table
where inputtime>DATE_SUB(CURDATE(), INTERVAL 1 WEEK) --一周
where inputtime>DATE_SUB(CURDATE(), INTERVAL 3 MONTH) --三月
where inputtime>DATE_SUB(CURDATE(), INTERVAL 1 YEAR) --一年

weekofyear(date)获取日期是该年第几周
left(date,7)获取年月
group by即可

只提供思路:首先你需要计算出每周的具体时间(后台实现就可以了),sql中直接查出来进3个月的所有数据,并且你需要一个伪字段这个字段存这条数据创建
日期所对应的周(或者年和周),这样查出来的数据就符合了进3个月并且伪字段也统计到这些数据属于哪个周了,然后group by 用这个伪字段分组,count(数据量)
这样就做到了你的第一个需求,第二个需求也是同理。

如果你觉得我的思路对你有帮助,请采纳。

 create table tab_002(
    dt DATE,
    cnt int
)
insert into tab_002 values(now(),1);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -5 day),1);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -7 day),2);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -17 day),2);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -27 day),2);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -37 day),2);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -97 day),2);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -1 year),2);
insert into tab_002 values(DATE_ADD(now(),INTERVAL -2 year),2);
 #近三个月的数据(倒推13周),最后用年周分组汇总一下
select dt,cnt,year(dt) as 年,week(dt,2) as 周 from tab_002
where dt>DATE_ADD(now(),INTERVAL -13 week)

图片说明

 #查询近一年每个月的数据量,按每个月30天计算
#你上面这样的统计有点不准确,这样的话不是同一个月的数据都统计进去了(一个月按30天统计)
#建议下面这样,每个月按每个月的统计,该多少天就多少天。往前推12个月的数据

#近一年的数据(倒推12个月),最后用年月分组汇总一下
select dt,cnt,year(dt) as 年, MONTH(dt) as 月 from tab_002
where  dt>DATE_ADD(now(),INTERVAL -12 month)

图片说明

  #近三个月的数据(倒推13周)
select 周,sum(cnt) from (
    select dt,cnt,year(dt) as 年,week(dt,2) as 周 from tab_002
    where dt>DATE_ADD(now(),INTERVAL -13 week)
)a
group by 周;

图片说明

 #近一年的数据(倒推12个月)
select 年,月,sum(cnt) from (
    select dt,cnt,year(dt) as 年, MONTH(dt) as 月 from tab_002
    where  dt>DATE_ADD(now(),INTERVAL -12 month)
) a
group by 年,月;

图片说明

分别按周和月来分组就可以查了