SELECT语句使用max()函数返回最旧行而不是匹配行的值

时间:2016-02-09 18:15:44

标签: mysql aggregate-functions

我有一个包含三列和几百万行数据的表。

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()错了,或者这是它应该如何工作的?

2 个答案:

答案 0 :(得分:1)

这是由于将聚合函数与非聚合列混合在一起。在PostgreSQL中,这将是一个错误,但在MySQL中,您可以从用于非聚合列值的行中获取任意条目。

答案 1 :(得分:0)

您可以按降序日期订购结果:

SELECT data FROM sensor_data WHERE sensor_id = 4 ORDER BY date DESC LIMIT 1;

如其他地方所述,MAX()是一个聚合函数,意在与GROUP BY一起使用。