使用正确的开始/结尾按月或周分组mysql查询

时间:2016-08-07 09:05:45

标签: mysql group-by

我已经搜索并查看了很多关于SO的答案,但即使尝试应用所有我发现的结果都不正确。

我试图按星期一星期一分组我的mysql结果,按月从第1天到最后一天分组

我尝试了不同类型的分组:

GROUP BY YEARWEEK(data)
GROUP BY WEEK(data)

几个星期和

GROUP BY MONTH(data)

几个月

所有这些分组方法都会返回不正确的分组。一些结果从一个月或一周的随机日开始。

这是一个示例查询,它从上个月的条目中得到结果除以星期,尽管星期分组不会导致星期几的星期。

SELECT *, count(id) AS count FROM leadz WHERE YEAR(data) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(data) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) GROUP BY YEARWEEK(data)

这些是我得到的一周结果:

 2016-07-01   2016-07-04   2016-07-16    2016-07-17   2016-07-25   2016-07-31

接下来是按月分组的总条目的示例查询,再次gropuing不是从月份的第1天开始

SELECT *, count(id) AS count FROM leadz GROUP BY MONTH(data)

这些是我得到的月份段:

2016-04-18    2016-05-25    2016-06-01    2016-07-25   2016-08-02

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

要在星期一开始,你应该使用

YEARWEEK(data, 1)

WEEK(data,1)

请参阅参考资料http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

所以你的选择应该是

SELECT *, count(id) AS count 
FROM leadz 
WHERE YEAR(data) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
AND MONTH(data) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) 
GROUP BY YEARWEEK(data, 1)