Mysql 按周/月间隔的日期范围分组

Mysql 按周/月间隔的日期范围分组,mysql,sql,date,group-by,Mysql,Sql,Date,Group By,我使用的是MySQL,我有下表: | clicks | int | | period | date | 我希望能够生成这样的报告,其中周期在过去4周内完成: | period | clicks | | 1/7 - 7/5 | 1000 | | 25/6 - 31/7 | .... | | 18/6 - 24/6 | .... | | 12/6 - 18/6 | .... | SELECT WEEK(PERIOD), SUM(CLICKS) FROM T

我使用的是MySQL,我有下表:

| clicks | int  |
|   period  | date |
我希望能够生成这样的报告,其中周期在过去4周内完成:

|   period    | clicks |
|  1/7 - 7/5  |  1000  | 
| 25/6 - 31/7 |  ....  |
| 18/6 - 24/6 |  ....  |
| 12/6 - 18/6 |  ....  |
SELECT WEEK(PERIOD), SUM(CLICKS)
FROM TABLE
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK
GROUP BY WEEK(PERIOD)
或在过去3个月内:

| period | clicks |
|  July  |  ....  |
|  June  |  ....  |
| April  |  ....  |

如何进行可生成等效日期范围和单击计数的select查询?

对于过去3个月,您可以使用:

SELECT MONTH(PERIOD), SUM(CLICKS)
FROM TABLE
WHERE PERIOD >= NOW() - INTERVAL 3 MONTH
GROUP BY MONTH(PERIOD)
或在过去4周内:

|   period    | clicks |
|  1/7 - 7/5  |  1000  | 
| 25/6 - 31/7 |  ....  |
| 18/6 - 24/6 |  ....  |
| 12/6 - 18/6 |  ....  |
SELECT WEEK(PERIOD), SUM(CLICKS)
FROM TABLE
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK
GROUP BY WEEK(PERIOD)

代码未测试。

是否将日期存储为int?这个字段看起来怎么样?@simendsjo格式混乱-我也这么想,但读的时候没有往下读!很抱歉,这是一个名为period的字段,日期类型为。这是对period的更好检查,我更正了我的答案以反映它。出于好奇,如果period字段是类似20100609的整数(对应于2010-06-09日期),那么查询应该是什么样的。在这种int类型中性能会更好吗?可能只有当您需要筛选一系列日期时,因为您不能按周筛选(您仍然必须将其转换为日期)。记住选择一个答案:P@khell:我不会为这种微观优化而烦恼。我已经在大桌子上做了一千次了,没有任何问题。请确保您正在为该列编制索引。我想知道是否有一种方法可以显示问题中提到的周报的周期。我不知道优化器是否在不检查结果中的所有日期的情况下处理周(周期)。这就是为什么我喜欢使用WEEK(Period)作为WeekPeriod,Group by WeekPeriod我主要使用Oracle,您必须根据您选择的同一字段对其进行分组(您不能将字段和组别名为该字段)。我认为内部的问题是相同的。
SELECT
 WEEKOFYEAR(`date`) AS period,
 SUM(clicks) AS clicks
FROM `tablename`
WHERE `date` >= CURDATE() - INTERVAL 4 WEEK
GROUP BY period

SELECT
 MONTH(`date`) AS period,
 SUM(clicks) AS clicks
FROM `tablename`
WHERE `date` >= CURDATE() - INTERVAL 3 MONTH
GROUP BY period