我的问题始于一组采用以下一般形式的表:
CREATE TABLE data_table (
entity_fk integer,
timestamp timestamptz,
value bigint
);
对于每个 entity_fk ,每隔30秒到2分钟插入一个值数据点,因此插入之间的时间不是恒定的。
正常选择模式是获取特定日期的单个 entity_fk 的所有数据点。然后将该数据绘制成图形/可视化。
为了使可视化软件能够正确显示/注释数据中的间隙,我需要在时间序列中填充SELECT填充值的NaN entity_fk
所以这就是我想要做的事情:
对于此数据,将24小时时段分解为4分钟窗口,然后仅填充那些不包含 任何 特定时间戳的4分钟窗口entity_fk具有均匀分布的30秒时间戳和NaN值。
到目前为止,我对此的概念方法是:
我可以单独执行步骤1-3,但不能在CTE环境中执行。关于如何执行步骤4-5,我完全失去了。
这是我在选择entity_fk 7的所有可用时间戳时得到的一个例子(在很短的时间范围内):
entity_fk | timestamp | value
-----------+------------------------+-------
7 | 2016-04-05 13:00:00+00 | 1
7 | 2016-04-05 13:00:32+00 | 2
7 | 2016-04-05 13:01:14+00 | 3
7 | 2016-04-05 13:01:54+00 | 4
7 | 2016-04-05 13:02:49+00 | 5
7 | 2016-04-05 13:03:39+00 | 6
7 | 2016-04-05 13:13:00+00 | 7
7 | 2016-04-05 13:13:48+00 | 8
7 | 2016-04-05 13:15:04+00 | 9
这就是我想要的样子,填补了值6和7之间的差距:
entity_fk | timestamp | value
-----------+------------------------+-------
7 | 2016-04-05 13:00:00+00 | 1
7 | 2016-04-05 13:00:32+00 | 2
7 | 2016-04-05 13:01:14+00 | 3
7 | 2016-04-05 13:01:54+00 | 4
7 | 2016-04-05 13:02:49+00 | 5
7 | 2016-04-05 13:03:39+00 | 6
7 | 2016-04-05 13:04:00+00 | NaN
7 | 2016-04-05 13:04:30+00 | NaN
7 | 2016-04-05 13:05:00+00 | NaN
7 | 2016-04-05 13:05:30+00 | NaN
7 | 2016-04-05 13:06:00+00 | NaN
7 | 2016-04-05 13:06:30+00 | NaN
7 | 2016-04-05 13:07:00+00 | NaN
7 | 2016-04-05 13:07:30+00 | NaN
7 | 2016-04-05 13:08:00+00 | NaN
7 | 2016-04-05 13:08:30+00 | NaN
7 | 2016-04-05 13:09:00+00 | NaN
7 | 2016-04-05 13:09:30+00 | NaN
7 | 2016-04-05 13:10:00+00 | NaN
7 | 2016-04-05 13:10:30+00 | NaN
7 | 2016-04-05 13:11:00+00 | NaN
7 | 2016-04-05 13:11:30+00 | NaN
7 | 2016-04-05 13:12:00+00 | NaN
7 | 2016-04-05 13:12:30+00 | NaN
7 | 2016-04-05 13:13:00+00 | 7
7 | 2016-04-05 13:13:48+00 | 8
7 | 2016-04-05 13:15:04+00 | 9