我有一個包含三列和數百萬行數據的表。使用max()函數返回最舊的行而不是匹配的行的值的SELECT語句
sensor_data
sensor_id int PK
date datetime PK,
data decimal (10,3)
該查詢返回最近的傳感器4日期間,但對於傳感器4最早的數據:
select max(date), data
from sensor_data
where sensor_id = 4;
這些查詢的數據返回正確的值:
select date, data
from sensor_data
where sensor_id = 4
and date = (select max(date) from sensor_data where sensor_id = 4)
order by date desc;
select date, data
from sensor_data
where sensor_id = 4
order by date desc
limit 1;
我是MySQL的新手。我是否使用max()
錯誤,或者它是如何工作的?
允許該查詢是MySQLism,它不是一個真正有效的SQL查詢。它的意思是「從符合條件的行中獲取最大日期和_any_數據。」大多數(如果不是所有)其他RDBMS都完全拒絕查詢,因爲您必須在任何沒有聚集的字段上使用聚合函數(a'la max/min)或GROUP BY。 –
@JoachimIsaksson:這已經有一段時間了,但我可以發誓在SQL Server中這樣做。 – Dave
SQL Server失敗,「列'sensor_data.data'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。」 –