假设你需要知道某物在一个时间范围内“活跃”了多长时间——(以时间戳为例,以分钟为单位)
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),然后对活动状态的差值求和。(见演示)
select sum(nts-ts)
from ( select ts ,coalesce(lead(ts) over( order by ts),15) nts, state from t) s
where state = 'active'