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

SELECT statement using max() function returning values from oldest row instead of matching row

我有一个 table 三列和几百万行数据。

sensor_data

sensor_id int PK
date datetime PK,
data decimal (10,3)

此查询 return 是传感器 4 的最新日期,但传感器 4 的最旧数据:

select max(date), data
from sensor_data
where sensor_id = 4;

这些查询 return 正确的数据值:

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() 是错误的,还是它应该如何工作?

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

您可以按日期降序排列结果:

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

如其他地方所述,MAX() is an aggregate function, meant to be used with GROUP BY