使用InfluxDB子查询来减去值

Nhz*_*Nhz 10 influxdb grafana

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

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

SELECT mean("value") FROM "table" WHERE $timeFilter GROUP BY time($interval) fill(null)
Run Code Online (Sandbox Code Playgroud)

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

SELECT min("value") FROM "table" WHERE $timeFilter 
Run Code Online (Sandbox Code Playgroud)

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

SELECT mean("value") - (SELECT min("value") FROM "table" WHERE $timeFilter) FROM "table" WHERE $timeFilter GROUP BY time($interval) fill(null)
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*Tim 2

使用 InfluxDB 的内置函数可以实现这一点:

SELECT cumulative_sum(difference((mean("value")))) FROM "table" WHERE $timeFilter GROUP BY time($interval) fill(null)
Run Code Online (Sandbox Code Playgroud)

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

我不完全确定,但是这个查询需要一个额外的mean()关联子句GROUP BY。也许使用max或更好first,具体取决于您的需要。

更新

或者,您确实可以使用子查询 和GROUP BY来实现这一点,但这样您只能获得可以表示的时间范围GROUP BY(例如,2010 年 7 月 6 日的 14:13 到 15:16 比较困难)。

SELECT (energy_live-energy_fill) as Energy FROM
  (SELECT first(value) as energy_fill from energyv3 WHERE $timeFilter GROUP BY time(1d)),
  (SELECT first(value) as energy_live from energyv3 WHERE $timeFilter GROUP BY time($__interval))
fill(previous)
Run Code Online (Sandbox Code Playgroud)