mysql - SQL 返回最近 12 周的数据,按周分组,从上周一开始

标签 mysql sql sorting date

我一直在研究一个 MySQL 查询,该查询将数据按周排序,但我就是不知道如何做到这一点。

我想将当前和过去 11 周的数据按周进行排序。每周的运行时间为周一 00:00:00 至周日 23:59:59。

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

第 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)

等等...

每周都会对值字段数据进行总计。

我需要返回的数据格式为:

日期时间:该周的第一个日期(始终是星期一)。

值(value):当周所有值(value)的总和。

例如返回的数据:

第 1 周:2014 年 12 月 1 日:总计值=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 服务器这样做。

如有任何建议,我们将不胜感激。 :-)

最佳答案

基于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;

关于mysql - SQL 返回最近 12 周的数据,按周分组,从上周一开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294836/

相关文章:

mysql - 相关表的sql查询

php - HTML 表单不使用 PHP 将数据发送到 MySQL

MySQL 在列中连接具有多个值的表

mysql - 2 个联合查询之间的差异

sql - 在不复制 key 的情况下加入

python - 如何将文本文件转换为列表,然后使用 Python 对其进行排序?

c - 如何修复 C 中的冒泡排序函数?

mysql - 从数据库中获取值

MySQL - 无法创建内部包含 SET 变量的 View

c++ - 从最低值到最大值对 STL map 进行排序