在QuestDB中如何从IoT传感器表获取按prob值排序的前5个唯一传感器设备?
获取前5个唯一传感器设备(按prob降序)
嘿,这个问题我太熟悉了——直接排序加LIMIT会因为重复的name导致结果不符合预期,核心是得先确保每个传感器名称只出现一次,再按prob排序筛选。这里给你几个实用的解决方案,根据你的需求选就行:
方案1:仅获取唯一名称及对应prob(适合只需要这两个字段的场景)
如果你只需要name和对应的prob值,用GROUP BY分组是最稳妥的,它会自动为每个name保留最大的prob(如果同一个传感器有不同prob值的话),然后再排序取前5:
SELECT name, MAX(prob) AS max_prob FROM my_sensors GROUP BY name ORDER BY max_prob DESC LIMIT 5;
如果你的数据里每个name对应的prob都是一致的(就像你示例里那样),用DISTINCT也能快速实现:
SELECT DISTINCT name, prob FROM my_sensors ORDER BY prob DESC LIMIT 5;
方案2:获取唯一传感器的完整记录(需要其他字段如freq、lim等)
要是你还需要每个唯一传感器对应的完整行数据(比如freq、lim这些字段),用窗口函数ROW_NUMBER()是最佳选择。它会给每个name分组里的行按prob降序编号,然后我们只取每组的第一行,再排序筛选前5:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY prob DESC) AS row_num FROM my_sensors ) ranked_sensors WHERE row_num = 1 ORDER BY prob DESC LIMIT 5;
这个方法的好处是,既能保证每个name只出现一次,又能拿到该传感器对应prob最高的那一条完整记录。
内容的提问来源于stack exchange,提问作者djbobo
相关产品推荐
相关产品推荐

