如何从 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 个传感器,比方说
prob
排名前 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
参考文献:
我有一个 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 个传感器,比方说
prob
排名前 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
参考文献: