我一直致力于MySQL查询,将数据分类为数周,但我无法弄清楚如何做到这一点。
我想将数据分类为当前和过去11周的数周。每周的营业时间为周一00:00:00至周日23:59:59。
(以今天的日期为2014-12-04)......
第1周:2014-12-01> 2014-12-07 - (上周一00:00:00至下周日23:59:59)
第2周:2014-11-24> 2014-11-30 - (星期一00:00:00至上周日23:59:59之前)
第3周:2014-11-17> 2014-11-23 - (周一前一个00:00:00到最后一个周日23:59:59之前)
等等......
对于每周,将对值字段数据进行总计。
我需要返回的格式为:
datetime:该周的第一个日期(始终是星期一)。
value:该周所有值的总和。
例如,返回的数据:
第1周:2014-12-01:总值= 11
第2周:2014-11-24:总值= 3
第3周:2014-11-17:总值= 9
第4周:2014-11-10:总值= 7
表1数据:
table1id datetime value
1 2014-09-01 06:00:00 4
2 2014-09-04 17:00:00 6
3 2014-09-09 18:00:00 9
4 2014-09-15 07:00:00 4
5 2014-09-20 10:00:00 2
6 2014-09-25 10:00:00 3
7 2014-09-30 09:00:00 8
8 2014-10-01 14:00:00 5
9 2014-10-05 10:00:00 7
10 2014-10-09 18:00:00 3
11 2014-10-15 05:00:00 4
12 2014-10-20 07:00:00 8
13 2014-10-24 16:00:00 9
14 2014-10-29 15:00:00 5
15 2014-10-31 16:00:00 7
16 2014-11-05 09:00:00 2
17 2014-11-10 08:00:00 4
18 2014-11-15 16:00:00 3
19 2014-11-20 10:00:00 9
20 2014-11-25 10:00:00 2
21 2014-11-30 10:00:00 1
22 2014-12-01 15:00:00 7
23 2014-12-04 18:00:00 2
我可以'只需使用PHP将所有未排序的数据拉到日期范围,然后从那里对其进行排序,但我宁愿MySQL服务器这样做。
任何建议都将不胜感激。 : - )
答案 0 :(得分:0)
基于generate days from date range 你可以这样做:
select mondays.week, mondays.day, sum(value)
from
(select a.a+1 week, curdate() - WEEKDAY(curdate()) - INTERVAL (7*a.a) DAY as day from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9 union all select 10 union all select 11) as a) as mondays,
Table_1
where Table_1.datetime between mondays.day and (mondays.day + interval(7) day)
group by mondays.week, mondays.day;