两个类似的MySQL查询给出不同的结果

两个类似的MySQL查询给出不同的结果,mysql,database,Mysql,Database,我有一个数据库保存设备的读数。我正在尝试编写一个查询,可以从设备中选择最新的读数。我有两个看起来相同的查询,我希望得到相同的结果;但事实并非如此。查询如下: 第一个问题: select max(datetime), reading from READINGS where device_id = '1234567890' 第二个问题: select datetime, reading from READINGS where device_id = '1234567890' and datetim

我有一个数据库保存设备的读数。我正在尝试编写一个查询,可以从设备中选择最新的读数。我有两个看起来相同的查询,我希望得到相同的结果;但事实并非如此。查询如下:

第一个问题:

select max(datetime), reading
from READINGS
where device_id = '1234567890'
第二个问题:

select datetime, reading
from READINGS
where device_id = '1234567890' and datetime = (select max(datetime)
                                               from READINGS
                                               where device_id = '1234567890')

它们都为reading属性提供了不同的结果。第二个是给出正确结果的那一个,但是为什么第一个给出的结果不同呢?

这是因为您没有使用
阅读分组
子句,您应该在两个查询中都使用该子句。

这是因为您没有使用
阅读分组
子句,这是MySQL在工作中的行为。使用分组时,所选列必须出现在group by中,或者是聚合函数,例如min(),max()。在大多数其他数据库风格中,不允许混合聚合和普通列

第一个查询将只返回每个组中的第一个评级(第一个是在文件系统中的位置),这很可能是错误的


第二个查询将评级与导致正确结果的最大时间戳相关联

这是MySQL在工作中的行为。使用分组时,所选列必须出现在group by中,或者是聚合函数,例如min(),max()。在大多数其他数据库风格中,不允许混合聚合和普通列

第一个查询将只返回每个组中的第一个评级(第一个是在文件系统中的位置),这很可能是错误的


第二个查询将评级与导致正确结果的最大时间戳相关联

您可以使用和命令来了解有关查询的更多信息。

您可以使用和命令来了解有关查询的更多信息。

这在MySQL上是正常的。请参见以下内容:


另外,请阅读

这在MySQL上是正常的。请参见以下内容:


另外,请阅读根本不起作用的

。它给了我完全不同的东西。当阅读甚至不是我所聚合的内容时,我为什么要使用分组方式呢?这根本不起作用。它给了我完全不同的东西。当阅读甚至不是我正在聚合的内容时,为什么我要使用group by?因此,如果我在MSSQL之类的东西中尝试第一个,它可能会对我呕吐,并告诉我我错了?@Perley回答第一个问题?很有可能,我相信只有SQLite在这方面的行为与MySQL相同。因此,如果我在MSSQL之类的东西中尝试第一个,它可能会对我呕吐,并告诉我我出错了?@Perley问第一个问题?很可能,我认为只有SQLite在这方面的行为与MySQL相同。
If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows.