select 只有 InfluxDB 序列中的第一个值的方法是什么?

What is the way to select only first value in InfluxDB sequences?

我有一个指示改变 smth 状态的过程的测量值。系统每秒询问 smth 是否正在改变,如果是,它在 db 中存储 1,否则什么都没有。所以我有 "ones" 的序列。 As here. Distance between points is 1s

我只想获取每个 "one" 序列的第一个点的时间。在这个特定的例子中它将是

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

In red squares

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

P.S。 first() 选择器需要 GROUP BY,但我不能假设序列小于 some_time_interval

您可能可以通过嵌套查询和 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

所以你先用零填空。然后在后续值之间取 differences。然后选择积极的差异。如果差异为 0,则它介于两个零或两个 1 之间,没有变化。如果它是 1 那么变化是从零到一(你需要的)。如果它是 -1 则变化是从 1 到 0,1 序列的末尾。

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