拥有一个包含以下列的表: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进行,我无法找到如何:(。
答案 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)
它将按特定日期的总和给出小时!