【发布时间】:2021-12-01 12:18:51
【问题描述】:
我正在尝试将时间序列记录集转换为更适合数据分析的内容。考虑以下连续记录集(From、To、Value)
"2019-10-03 03:58:21+00" "2019-10-03 03:59:04+00" 10
"2019-10-03 03:59:04+00" "2019-10-03 03:59:54+00" 15
"2019-10-03 03:59:54+00" "2019-10-03 04:02:00+00" 20
"2019-10-03 04:02:00+00" "2019-10-03 04:02:10+00" 25
我希望在每分钟开始时有一条记录,代价是“重复”行。
"2019-10-03 03:58:21+00" "2019-10-03 03:59:00+00" 10
"2019-10-03 03:59:00+00" "2019-10-03 03:59:04+00" 10
"2019-10-03 03:59:04+00" "2019-10-03 03:59:54+00" 15
"2019-10-03 03:59:54+00" "2019-10-03 04:00:00+00" 20
"2019-10-03 04:00:00+00" "2019-10-03 04:01:00+00" 20
"2019-10-03 04:01:00+00" "2019-10-03 04:02:00+00" 20
"2019-10-03 04:02:00+00" "2019-10-03 04:02:10+00" 25
第一行重复一次,因为它重叠了一分钟。第二个没有重复,因为它在一分钟内。第三个重复了两次,因为它重叠了 3 分钟。最后没有爆炸,因为它在一分钟内(但它也在一分钟内开始)。该值本身在展开的行中保持不变。
我觉得我的解决方案是 Window 函数 (lead/lag?)、generate_series() 和各种 date_part / date_trunc 调用的组合。可能是cross 或lateral 自加入...
目前使用的是 PostgreSQL 13.4,所以我应该可以访问最新最好的 API。如果有任何帮助,我也在使用 timescaledb 2.4.2 和超表,尽管它们的 time_bucket 函数似乎更多的是减少行数,而不是增加行数。
希望朝着正确的方向前进!
【问题讨论】:
-
你检查过time_bucket_gapfill吗?可能这就是你要找的。span>
-
多么棒的领导,非常感谢。但是,它只能与聚合一起使用。但现在我至少可以用传统的 postgresql 功能搜索“填补空白”了。
标签: postgresql time-series window-functions timescaledb