InfluxDB从group by标签中选择前n个结果

Dio*_*oLG 1 influxdb

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

样本数据将是:

 time | device_name | daily_installs | daily_uninstall
  t1  |   device1   |       0        |       1
  t1  |   device2   |       2        |       0
  t2  |   device2   |       2        |       0
  t2  |   device3   |       12       |       0
Run Code Online (Sandbox Code Playgroud)

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

但是设备的数量是巨大的,因此我想只筛选前10名.

如何使用InfluxDB实现这一目标?

Ehu*_*Lev 7

版本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)
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*esa 6

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

版本1.1-

步骤1

选择月度计数以进行新的度量

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

第2步

从新测量中选择前10个结果

SELECT top(monthly_uninstall, 10), device_name
FROM newmeasurement
Run Code Online (Sandbox Code Playgroud)

版本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)
Run Code Online (Sandbox Code Playgroud)

  • 尝试使用最新版本。子查询在 v1.2.2 中有许多相关的错误 (2认同)