2012-06-29 161 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

相關問題