如何从 QuestDB 中的 table 个 IoT 传感器中按价值获取前 5 位设备?

How do I get the top-5 devices by value from a table of IoT sensors in QuestDB?

我有一个 table 如下所示:

prob name freq lim count hash time
0.0755 ard 0.988 0.633 0 5YIF6HSOtHN9HdcE5IPzMe 2021-04-09T10:56:00.986441Z
0.0755 ard 0.988 0.633 0 5YIF6HSOtHN9HdcE5IPzMe 2021-04-09T10:56:00.986441Z
0.0006259999999999999 srd2 0.987 0.649 0 5GFwJHucflHj46Hwet6qvc 2021-04-09T10:56:14.799226Z
0.0006259999999999999 ard2 0.987 0.649 0 5GFwJHucflHj46Hwet6qvc 2021-04-09T10:56:14.799226Z
0.0006259999999999999 ard2 0.987 0.649 0 5GFwJHucflHj46Hwet6qvc 2021-04-09T10:56:14.799226Z
0.145 ard12 0.986 0.597 1 1MgM0WDaoQ2A3bnIQTR6ty 2021-04-09T10:56:15.309345Z
0.145 ard12 0.986 0.597 1 1MgM0WDaoQ2A3bnIQTR6ty 2021-04-09T10:56:15.309345Z

我想根据某个其他值按名称获得前 5 个传感器,比方说

当然如果我这样做

select * from my_sensors order by prob DESC

然后我有一些重复的传感器名称,因此 LIMIT 无法正常工作。

在这种情况下你可以做的是使用 WITH 允许子查询:

WITH top_devices AS (select DISTINCT name, prob from my_sensors order by prob DESC)
select * from top_devices limit 5;

这将 return 包含传感器名称和 prob 列的两列:

name prob
ard12 0.145
ard 0.0755
ard2 0.0006259999999999999
... ...

你的例子中只有三个独特的传感器,但我认为完整的数据集会给你前 5 个。

为了摆脱欺骗,此处的示例查询使用 DISTINCT

参考文献: