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

时间:2016-12-16 15:50:51

标签: influxdb

我每天都有一套设备数据和我的应用程序的(非)安装数量。

示例数据为:

 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对它们进行分组,并按月(或任何其他范围)获取我的安装总数。

但是设备数量巨大,因此我只想过滤前十名。

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

2 个答案:

答案 0 :(得分: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)

请注意,语法为" top(" field_name"," tag"," topN")来自....&#34 ;

答案 1 :(得分:5)

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

版本1.1 -

第1步

选择每月计数到新测量值

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

第2步

从新测量中选择前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)