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

时间:2012-06-29 13:56:26

标签: mysql database

我有一个包含设备读数的数据库。我正在尝试编写一个可以从设备中选择最新读数的查询。我有两个看似相同的问题,我希望得到相同的结果;但他们没有。查询如下:

首先查询:

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')

它们都为阅读属性提供不同的结果。第二个是给出正确结果但是为什么第一个给出不同的东西?

4 个答案:

答案 0 :(得分:3)

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

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

第二个查询将评级与最大时间戳相关联,从而得出正确的结果。

答案 1 :(得分:2)

这是因为你没有使用GROUP BY reading子句,你应该在两个查询中使用它。

答案 2 :(得分:1)

这在MySQL上是正常的。请参阅documentation

If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows. 

另请阅读http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

答案 3 :(得分:0)

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