0

我有一个测量表明改变 smth 状态的过程。系统每秒都会询问 smth 是否正在改变,如果是,它将 1 存储在 db 中,否则什么也没有。所以我有“一”的序列。 就像这里一样。点间距为1s

我只想获得每个“一个”序列的第一个点的时间。在这个特定的例子中,它将是

Time                Value
2019-01-01 11:46:55 1
2019-01-01 12:36:45 1

在红色方块中

有没有办法使用查询来做到这一点?或者可能是简单的python模式?

PSfirst()选择器需要GROUP BY,但我不能假设序列小于some_time_interval

4

1 回答 1

0

您可能可以通过嵌套查询和difference函数来实现您所需要的。https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#difference
例如:
假设您的测量被调用change并且该字段被调用value

SELECT diff FROM
 (SELECT difference(value) as diff FROM
  (SELECT value FROM change WHERE your_time_filter GROUP BY time(1s) fill(0))
 )
 WHERE diff > 0

所以你首先用零填充空格。然后取difference后续值之间的 s。然后选择积极的差异。如果差为 0,那么它在两个零或两个 1 之间,没有变化。如果它是 1,那么变化是从零到一(你需要什么)。如果是 -1,那么变化是从 1 到 0,1 序列结束。

您可能需要使用时间间隔和分组稍微调整查询。

于 2020-02-26T08:49:00.577 回答