【问题标题】:InfluxDB select top n results from a group by tagInfluxDB 按标签从组中选择前 n 个结果
【发布时间】:2016-12-16 15:50:50
【问题描述】:

我有一个设备数据集以及我的应用每天完成的(取消)安装数量。

样本数据是:

 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.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 ...."

    【讨论】:

    • 你知道有没有办法改变输出列的顺序?
    • 从来不需要那个
    • 有没有相当于简单的SQL命令'SELECT TOP 10 * FROM db'来执行这个任务?
    【解决方案2】:

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

    版本 1.1-

    步骤 1

    将每月计数选择到新的度量中

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

    第二步

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

    【讨论】:

    • 嗨@Michael,我使用的是 inflaxDB 1.22 版,我运行了你的最后一个示例(没有 Step 1 / 2 ),但它在设备名称中返回 null。我错过了什么?
    • 尝试使用最新版本。子查询在 v1.2.2 中有许多相关的错误
    • 谢谢,语法有点变化,所以我添加了它。
    • 当我使用这样的查询时,所有点的设备名称都是一样的!!!
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2019-10-26
    相关资源
    最近更新 更多