【发布时间】:2021-08-11 12:17:15
【问题描述】:
我有一个 Influx db(V1.8- FLUX 被主机禁用)。我想在使用估计函数的测量中“添加”一列。
初始测量结果如下:
time Current state_string
---- ------- ------------
1577836800000000000 0 off
1577836860000000000 0.125 off
1577836920000000000 0.25 standby
1577836980000000000 0.375 standby
1577837040000000000 0.5 standby
1577837100000000000 0.625 on
1577837160000000000 0.75 on
1577837220000000000 0.875 in use
1577837280000000000 1 in use
然后我想添加一个计算估计时间的列:
select elapsed("state", 1s) as "time_in_state" from "device_measurements" where hardware_sensor_id = '31c32c1b-119e-4167-0'
导致:
time time_in_state
---- -------------
1577836860000000000 60
1577836920000000000 60
1577836980000000000 60
1577837040000000000 60
1577837100000000000 60
1577837160000000000 60
1577837220000000000 60
1577837280000000000 60
到目前为止一切顺利。然后我想加入这两个表并将它们存储在一个新的表中,同时保留标签。 (我的真实测量有更多的标签,为了简单起见,这里省略了)
我想出了:
select time_in_state into "device_measurements" from
(select elapsed("state", 1s) as "time_in_state" from "device_measurements" where hardware_sensor_id = '31c32c1b-119e-4167-0' group by * )
group by *
我已经阅读了需要按 * 分组来保留标签。但我导致了一个问题:
time Current state_string time_in_state
---- ------- ------------ -------------
1577836800000000000 0 off
1577836860000000000 0.125 off 60
1577836920000000000 0.25 standby
1577836980000000000 0.375 standby 60
1577837040000000000 0.5 standby 60
1577837100000000000 0.625 on
1577837160000000000 0.75 on 60
1577837220000000000 0.875 in use
1577837280000000000 1 in use
如您所见,time_in_state 列并不是针对每一行计算的。这是由group by子句引起的……
我如何对查询进行公式化,以便获得一个带有标签的表和每列的 time_in_state。我已经阅读了 join() 文档,但不知何故无法将我在那里阅读的内容翻译成代码。
【问题讨论】: