【问题标题】:TimescaleDB - how get timestamp differences between rows?TimescaleDB - 如何获得行之间的时间戳差异?
【发布时间】:2021-11-13 12:31:36
【问题描述】:

假设您需要知道某件事在某个时间范围内“活跃”了多长时间 - (以分钟为单位的时间戳)-

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 中做这样的事情?

【问题讨论】:

  • 嗯?这是没有意义的。这是怎么回事? 6.8-3.5 + 15-9.3 确定了吗?我看不出方程式的规律。
  • @AdrianKlaver 为更清晰而编辑
  • 在这里扩展了这个问题 - 还需要能够将结果分组到垃圾箱中 - stackoverflow.com/questions/69246220/…

标签: sql postgresql timescaledb


【解决方案1】:

您的数据不符合隐含的数据类型(3.5 不是时间戳)。但是,您似乎正在尝试获取连续条目之间差异的总和。如果是这样,请使用前导函数获取下一个值(最后一个条目与 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' 

【讨论】:

  • 谢谢你,@Belayer - 有效 - 我不知道合并。
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 2011-09-24
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
相关资源
最近更新 更多