当前位置:  开发笔记 > 后端 > 正文

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

如何解决《MySQL/SQL:仅在Datetime列上按日期分组》经验,为你挑选了4个好方法。

有一个像一个列的表:mydate DATETIME...

我有一个查询,例如:

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

这将完整分组datetime,包括小时和分钟.我希望通过日期YYYY/MM/DD而不是日期来组建小组YYYY/MM/DD/HH/mm.

有人知道怎么做吗?我仍然可以在我的代码中动态地执行它(我正在运行),但我正在清理垃圾代码,这可以通过SQL进行,我无法找到如何:(.



1> Michael Hare..:

将日期时间转换为日期,然后使用以下语法进行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;

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


这是一个表演陷阱!请记住,使用这样的函数--DATE()不允许您利用此列上的索引.

2> moo..:

要么:

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

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


如果MySQL运行两次转换,我会非常惊讶.只有select by语句才能允许group by group中的聚合函数和表达式.引擎已经知道两个表达式是相同的.

3> Richard Merc..:

我发现我需要在月份和年份进行分组,因此上述两种方法都不适用于我.相反,我使用date_format

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


查询失灵了

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

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

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有