在Apache IoTDB中如何使用MAX_BY函数,在温度达到最大值时返回所有时间戳?

编程语言 2026-07-10

在Apache IoTDB 2.0.6的表模型中,MAX_BY函数可以返回数据值达到最大值时对应的时间戳。然而,我的需求是在存在多个时间点达到相同最大值时,返回全部时间戳。我尝试了这个函数,但它只返回其中一个。

下面是我的场景:

  select * from sensor_data order by time
  +-----------------------------+---------+-----------+
  | time|sensor_id|temperature|
  +-----------------------------+---------+-----------+
  |2024-01-01T08:00:00.000+08:00| s001| 25.0|
  |2024-01-01T09:00:00.000+08:00| s002| 30.0|
  |2024-01-01T10:00:00.000+08:00| s003| 28.0|
  |2024-01-01T11:00:00.000+08:00| s004| 30.0|
  +-----------------------------+---------+-----------+

执行的SQL:

  SELECT max_by(time, temperature) FROM sensor_data

返回的结果:

  +-----------------------------+
  | _col0|
  +-----------------------------+
  |2024-01-01T11:00:00.000+08:00|
  +-----------------------------+

正如你所看到的,结果只包含与最大温度值(30.0)对应的其中一个时间戳:2024-01-01T11:00:00.000+08:00。然而,在原始数据中,还有一个温度为30.0的时间戳:2024-01-01T09:00:00.000+08:00。

期望结果:

  +-----------------------------+
  | _col0|
  +-----------------------------+
  |2024-01-01T09:00:00.000+08:00|
  |2024-01-01T11:00:00.000+08:00|
  +-----------------------------+

我该如何调整SQL语句,以实现我的期望,在温度达到最大值时获取所有时间戳?

解决方案

也许你可以尝试下面这个SQL

SELECT time, sensor_id, temperature
FROM sensor_data
WHERE temperature = (SELECT MAX(temperature) FROM sensor_data)
ORDER BY time;

如果你关心性能

WITH max_temp AS (
  SELECT MAX(temperature) as max_val
  FROM sensor_data
)
SELECT time, sensor_id, temperature
FROM sensor_data, max_temp
WHERE temperature = max_temp.max_val
ORDER BY time;
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章