TimescaleDB - 如何获取行之间的时间戳差异?

TimescaleDB - how get timestamp differences between rows?

假设您需要知道某个时间范围内某项 'active' 的时长 -(例如,以分钟为单位的时间戳)-

timestamp, state
2.1, unavailable
3.5, active
6.8, wait
7.3, unavailable
9.3, active

对于 0-15 分钟的桶,答案是 6.8-3.5 + 15-9.3 = 9.0 分钟。 (即第一个活动状态持续 6.8-3.5 分钟,下一个从 9.3 分钟到 15 分钟障碍)。

你会如何在 TimescaleDB 中做这样的事情?

您的数据不符合隐含的数据类型(3.5 不是时间戳)。但是,您似乎正在尝试获取连续条目之间差异的总和。如果是这样,使用 lead 函数获取下一个值(与最后一个条目的 15 合并),然后对活动状态的差异求和。 (参见 demo

select sum(nts-ts) 
  from ( select ts ,coalesce(lead(ts) over( order by ts),15) nts, state from t) s
 where state = 'active'