【问题标题】:How can I normalize the time series in InfluxDB?如何标准化 InfluxDB 中的时间序列?
【发布时间】:2020-08-07 15:26:23
【问题描述】:

目标是创建在时间范围的第一个值上标准化的时间序列。例如,我们有系列

time                 | value
------------------------------
2020-07-13T00:00:00Z | 2
2020-07-14T00:00:00Z | 4
2020-07-15T00:00:00Z | 3

想要得到结果

time                 | value
------------------------------
2020-07-13T00:00:00Z | 1
2020-07-14T00:00:00Z | 2
2020-07-15T00:00:00Z | 1.5

我尝试了以下查询:

select "value" / first_value from (select "value" from "database"."autogen"."measurement"), (select first("value") as first_value from "database"."autogen"."measurement")

但它会产生空的时间序列。

有人能解释一下错误在哪里吗?

【问题讨论】:

    标签: influxdb influxql


    【解决方案1】:

    可以通过在查询末尾添加fill(previous) 来实现所需的结果,即

    select "value" / first_value from (select "value" from "database"."autogen"."measurement"), (select first("value") as first_value from "database"."autogen"."measurement") fill(previous)
    

    ...给出以下输出:

    name: measurement
    time                 value_first_value
    ----                 -----------------
    2020-07-13T00:00:00Z 
    2020-07-13T00:00:00Z 1
    2020-07-14T00:00:00Z 2
    2020-07-15T00:00:00Z 1.5
    

    似乎要进行"value" / first_value 计算,两个字段中的值必须存在于相同的时间戳中。由于子查询select first("value") as first_value from "database"."autogen"."measurement" 的结果提供了特定时间戳的单个值,因此不满足要求。但是,fill(previous) 使 first_value 在所需的时间戳可用。

    【讨论】:

      猜你喜欢
      • 2015-07-31
      • 2013-10-15
      • 2013-02-03
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多