2014-12-04 42 views
0

我一直在研究一种将数据分为几周的MySQL查询,但我无法弄清楚如何去做。SQL返回最近12星期的数据,按星期分组,从上周一开始

我想在当前和过去的11周内将数据分为几周。每周从星期一00:00:00至星期日23:59:59。

(以今天的日期为2014年12月4日)... 1

周:2014年12月1日> 2014-12-07 - (上周一00:00:00至下周日23: 59:59)

第2周:情节中字>情节中字 - (星期一之前的最后00:00:00到最后一个星期日23:59:59)

3周:2014- 11-17> 2014-11-23 - (周一前最后00:00:00到上周日23:59:59)

依此类推...

对于每个星期,值字段数据将被合计。

我需要返回的数据是在格式:

日期时间:这一周的第一天(始终星期一)。

value:当周所有值的总和。

例如,返回的数据:

周1:2014年12月1日:总计值= 11

第2周:2014年11月24日:总计值= 3

周3:2014年11月17日:总计值= 9

第4周:2014年11月10日:总计值= 7

TABLE_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服务器执行它。

任何建议将不胜感激。 :-)

+1

请迄今已尝试什么更新您的文章。 – 2014-12-04 13:08:41

回答

0

根据generate days from date range 你可以做smething这样的:

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; 
相关问题