首页 文章

使用InfluxDB子查询来减去值

提问于
浏览
10

我有一个充满 Value 的Influx数据库 . 这些值由Grafana提供 . 我需要的是根据选定的时间间隔获取实际值 .

目前,我对单个指标有以下查询:

SELECT mean("value") FROM "table" WHERE $timeFilter GROUP BY time($interval) fill(null)

我想要的是从该间隔中减去最低值,因此它只计算该间隔内的值 . 因此图表需要从零开始 . 要从该间隔获得最低值,我使用:

SELECT min("value") FROM "table" WHERE $timeFilter

所以我认为将这两个(使用子查询)组合起来应该可行:

SELECT mean("value") - (SELECT min("value") FROM "table" WHERE $timeFilter) FROM "table" WHERE $timeFilter GROUP BY time($interval) fill(null)

不幸的是,这不起作用 . 该查询不被接受为子查询 .

2 回答

  • 0

    @Pigueiras:

    我很难知道我的设置正在运行哪个版本的InfluxDB . 实际上,整个工作流程都是由我以前的同事开发的,包括InfluxDB(用于存储时间序列数据)Grafana(用于查询和可视化前端数据) .

    但是,我发现我的Grafana是v4.5.2

    我还想在Grafana中使用子查询,如下所示:

    InfluxDB Subqueries in Grafana FAILS with "error parsing query: GROUP BY requires at least one aggregate function"

    我不确定它是否因版本不匹配或其他原因而失败 .

    非常感谢您的支持 .

    巴拉

  • 0

    这可以使用InfluxDB的内置函数:

    SELECT cumulative_sum(difference((mean("value")))) FROM "table" WHERE $timeFilter GROUP BY time($interval) fill(null)
    

    这取得了连续数据点之间的差异(忽略绝对值),并在选定的时间范围内累计求和 .

    我不完全确定,但此查询需要与 GROUP BY 子句关联的附加 mean() . 也许最好根据您的需要使用 maxfirst .

相关问题