1

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

第一个查询:

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

4 回答 4

3

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

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

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

于 2012-06-29T14:02:46.300 回答
2

这是因为您没有使用GROUP BY reading应在两个查询中使用的子句。

于 2012-06-29T14:00:08.157 回答
1

这在 MySQL 上是正常的。请参阅有关此的文档

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

于 2012-06-29T14:09:00.660 回答
0

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

于 2012-06-29T14:03:44.007 回答