我有一个包含设备读数的数据库。我正在尝试编写一个可以从设备中选择最新读数的查询。我有两个看似相同的问题,我希望得到相同的结果;但他们没有。查询如下:
首先查询:
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')
它们都为阅读属性提供不同的结果。第二个是给出正确结果但是为什么第一个给出不同的东西?
答案 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)
您可以使用Explain和Explan extended命令了解有关查询的更多信息。