我有一个充满价值的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)
不幸的是,这不起作用.该查询不被接受为子查询.
使用 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)
| 归档时间: |
|
| 查看次数: |
3587 次 |
| 最近记录: |