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

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在工作中的行为。使用分组时,所选列必须出现在分组依据中或是一个聚合函数,例如min()、max()。在大多数其他数据库味道中,不允许混合聚集和正常列。
第一个查询将只返回每个组中的第一个评级(首先是文件系统中的评级),这很可能是错误的。
第二个查询将评级与最大时间戳关联,从而得出正确的结果。

08-04 14:49