InfluxDB select 根据标签分组的前 n 个结果

InfluxDB select top n results from a group by tag

我有一个设备数据集和我的应用程序每天完成的(未)安装数量。

示例数据为:

 time | device_name | daily_installs | daily_uninstall
  t1  |   device1   |       0        |       1
  t1  |   device2   |       2        |       0
  t2  |   device2   |       2        |       0
  t2  |   device3   |       12       |       0

我可以按 device_name 对它们进行分组,然后按月(或任何其他范围)获取安装总数。

但是设备数量巨大,所以我想只过滤前10个。

如何使用 InfluxDB 实现该目标?

答案取决于您使用的 InfluxDB 版本。

版本 1.1-

第 1 步

Select 每月计入新的测量值

SELECT count(daily_uninstall) as monthly_uninstall
INTO newmeasurement 
FROM mymeasurement
WHERE time > now() - 4w
GROUP BY device_name

第 2 步

Select 新测量的前 10 个结果

SELECT top(monthly_uninstall, 10), device_name
FROM newmeasurement

版本 1.2+

在 InfluxDB 的 1.2+ 版本中,您将能够使用子查询一步完成。

SELECT top(monthly_uninstalls,10), device_name
FROM (SELECT count(daily_uninstall) as monthly_uninstall 
      FROM mymeasurement 
      WHERE time > now() - 4w
      GROUP BY device_name)

版本 1.3.4

SELECT top(monthly_uninstalls,device_name,10) 
FROM (SELECT count(daily_uninstall) as monthly_uninstall 
      FROM mymeasurement 
      WHERE time > now() - 4w 
      GROUP BY device_name)

请注意语法是 "top("field_name", "tag", "topN") from ...."