【问题标题】:Using InfluxDB subquery to subtract values使用 InfluxDB 子查询减去值
【发布时间】:2017-08-29 09:46:44
【问题描述】:

我有一个 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)

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

【问题讨论】:

  • 您使用的是什么版本的 Influx?原则上 1.2 应该可以做这样的事情。
  • 我正在使用 InfluxDB shell 版本:1.2.0。我知道子查询是可能的,但就文档而言,仅在“FROM”部分中。该文档没有给出其他类型子查询的示例。
  • 你说的完全正确,看起来不可能。我想在一些 hack 中使用 grafana 进行模板化,但它不起作用,因为它显示时间戳而不是 min("count")。我想你能得到的最好的方法是计算最小值并从查询中减去常数:(
  • 感谢您的确认。 “减去常数”是什么意思?您能解释一下这是如何工作的吗?
  • 我的意思是:SELECT mean("value") - 123 FROM ...

标签: influxdb grafana


【解决方案1】:

这可以通过 InfluxDB 的内置函数实现:

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

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

我不完全确定,但这个查询需要一个额外的mean()GROUP BY 子句相关联。也许最好改用maxfirst,这取决于您的需要。

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多