2012-06-29 108 views
1

我有一个数据库,其中包含设备的读数。我正在尝试编写一个可以从设备中选择最新读数的查询。我有两个看似相同的查询,我期望得到相同的结果;然而他们没有。该查询如下:两个类似的MySQL查询给出了不同的结果

首先查询:

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

的他们都给出了读属性不同的结果。第二个是给出正确结果的那个,但为什么第一个给出了不同的东西?

回答

3

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

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

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

+0

因此,如果我尝试了第一个类似MSSQL的东西,它可能会呕吐我,并告诉我我错了? – Perley

+0

@Perley的第一个查询?很可能,我相信只有SQLite在这方面的行为与MySQL相同。 –

2

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

+0

这并不在所有的工作。它给了我完全不同的东西。为什么我想在阅读时使用一个组,甚至不是我正在聚合的? – Perley

相关问题