MySQL / SQL:仅在Datetime列上按日期分组

时间:2008-12-14 14:47:19

标签: sql mysql

拥有一个包含以下列的表:mydate DATETIME ...

我有一个查询,例如:

SELECT SUM(foo), mydate FROM a_table GROUP BY a_table.mydate;

这将按完整datetime进行分组,包括小时和分钟。我希望通过YYYY/MM/DD而不是YYYY/MM/DD/HH/mm来创建群组。

任何人都知道如何做到这一点?我仍然可以在我的代码中动态地执行它(我是atm),但是我正在清理垃圾代码,这可以通过SQL进行,我无法找到如何:(。

4 个答案:

答案 0 :(得分:240)

将日期时间转换为日期,然后使用以下语法转换为GROUP BY:

SELECT SUM(foo), DATE(mydate) FROM a_table GROUP BY DATE(a_table.mydate);

或者您可以将别名作为@ orlandu63建议的别名:

SELECT SUM(foo), DATE(mydate) DateOnly FROM a_table GROUP BY DateOnly;

虽然我认为它对性能没有任何影响,但它更清晰一些。

答案 1 :(得分:17)

或者:

SELECT SUM(foo), DATE(mydate) mydate FROM a_table GROUP BY mydate;

效率更高(我认为。)因为你不必每行两次施放mydate。

答案 2 :(得分:15)

我发现我需要分组按月和年份进行分组,因此上述任何一项都不适用于我。相反,我使用了date_format

SELECT date
FROM blog 
GROUP BY DATE_FORMAT(date, "%m-%y")
ORDER BY YEAR(date) DESC, MONTH(date) DESC 

答案 3 :(得分:7)

SELECT SUM(No), HOUR(dateofissue) 
FROM tablename 
WHERE dateofissue>='2011-07-30' 
GROUP BY HOUR(dateofissue)

它将按特定日期的总和给出小时!