MySQL名称查询中的解析顺序

MySQL名称查询中的解析顺序,mysql,Mysql,我将我的应用程序从SQLite切换到MySQL 我有嵌套查询,该数字是可变的,因此对我来说保持相同的名称很有用,如下所示: SELECT DATE_FORMAT(datetime, '%Y-%m-%d %H:00:00') as datetime FROM ( SELECT datetime FROM (...) AS T ) AS T GROUP BY datetime 在SQLIte中,GROUP BY datetime是在格式化日期上计算的,所以分组是在MySQL中进行的,而使用

我将我的应用程序从SQLite切换到MySQL

我有嵌套查询,该数字是可变的,因此对我来说保持相同的名称很有用,如下所示:

SELECT DATE_FORMAT(datetime, '%Y-%m-%d %H:00:00') as datetime FROM (
    SELECT datetime FROM (...) AS T
) AS T GROUP BY datetime
在SQLIte中,GROUP BY datetime是在格式化日期上计算的,所以分组是在MySQL中进行的,而使用的是纯传递的datetime,所以我没有分组

为了更好地解释这一点,MySQL可以做到这一点,但我不得不在每个循环中重命名列和/或表:

SELECT DATE_FORMAT(datetime, '%Y-%m-%d %H:00:00') as new_datetime FROM (
    SELECT datetime FROM (...) AS T
) AS T GROUP BY new_datetime

那么,有没有办法使MySQL group成为我想要的datetime呢?

如果要按格式化的datetime进行分组,请将其传递到group by子句中:

GROUP BY DATE_FORMAT(datetime, '%Y-%m-%d %H:00:00')
这将避免在不同的分/秒上出现多行

为了避免两次调用DATE_格式,可以使用以下方法:


选择@dtm:=DATE\u FORMAT datetime,“%Y-%m-%d%H:00:00”作为tablename中的日期时间,作为@dtm的T组,这不应该是日期\u FORMAT调用的两倍吗???这就是为什么我从一开始就没有使用它的原因。您是否试图避免两次调用date_format,或者避免列别名?我想我是糊涂了。你应该可以这样使用:选择@dtm:=DATE\u FORMATdatetime,“%Y-%m-%d%H:00:00”作为tablename中的datetime作为T GROUP BY@dtmI获得第一个分组小时两次,然后所有其他人只获得一次???比如2010-09-09 08:00:00,2010-09-09 08:00:00,2010-09-09:00:00,2010-09-09 10:00:00,2010-09-09 11:00:00。。。你能在这个语法文档上放一个链接吗?谢谢:在SELECT语句中,每个SELECT表达式只有在发送到客户端时才进行计算。这意味着,在HAVING、GROUP BY或ORDER BY子句中,引用在select表达式列表中指定了值的变量不会按预期工作。所以我想这就是为什么我会得到奇怪的结果。。。