0

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

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")

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

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

4

1 回答 1

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所需的时间戳可用。

于 2020-08-20T20:43:12.717 回答