使用InfluxDB子查询来减去值

时间:2017-04-04 09:19:43

标签: influxdb grafana

我有一个充满价值的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 :(得分: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"

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

非常感谢您的支持。

巴拉

答案 1 :(得分:0)

使用InfluxDB的内置功能可以做到这一点:

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

这将取连续数据点之间的差(忽略绝对值),并在选定的时间范围内累计该总和。

我不确定,但是此查询需要与mean()子句关联的附加GROUP BY。也许根据您的需要改用maxfirst