在Apache IoTDB中如何使用MAX_BY函数,在温度达到最大值时返回所有时间戳?
在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。