我有一个表,看起来像这样: -PostgreSQL的时间系列单时间戳与阵列推断时间
CREATE TABLE packet_test_short_array
(
packet_date timestamp without time zone NOT NULL,
frame_count integer,
packet_data int2[200],
CONSTRAINT packet_test_short_array_pk PRIMARY KEY (packet_date)
)
WITH (
OIDS=FALSE);
有一个时间戳和其本身从主时间戳由偏移测量阵列发言权1秒*他们的阵列位置。
即,在时间199的数组中的最后测量是在主时间戳后的199秒。
我想unnest数组并给每个成员递增时间戳(如上)1秒。
The rather nifty答覆krokodilco几乎是我想要的......
SELECT 1 id, x
FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x
除了 '1' 没有增加。
我希望这是一个容易的,但我不能发现它。
我非常感谢您的帮助&洞察请。
编辑:示例...
所以说,我有一个时间戳和包含10个值的数组,像这样: -
'2016年6月1日00:00:00' ::时间戳packet_date ,ARRAY [0,1,2,3,4,5,6,7,8,9] AS packet_data
我想将一个时间戳推断与的间隔的升序时间序列说1分钟;即将单个时间戳分为10行,每个分隔1分钟,每个对应值具有其自己的不同的时间戳。有点像这样...
packet_date,packet_value(从packet_data嵌套的)
“2016年6月1日00:00:00”,0
“2016年6月1日00:01:00”,1
“2016年6月1日00:02:00”,2
“2016年6月1日00:03:00”,3
“2016年6月1日00:04:00”,4
“ 2016-06-01 00:05:00“,5
”2016-06-01 00:06:00“,6
”2016-06-01 00:07:00“,7
”2016- 06-01 00:08:00“,8
”2016-06-01 00:09:00“,9
我知道如何生成时间序列...
select generate_series(min('2016-06-01 00:00:00':: timestamp),max('2016-06-01 00: 00:00“::时间戳+ INTERVAL '10分钟”),间隔“1分钟”)
但不能看到如何与它的相应的数组构件/值可以模拟这样匹配它...
选择unnest(ARRAY [0,1,2,3,4,5,6,7,8,9,10])
这有道理吗?
是的,这就是我正在寻找的 - 我不想将数据存储为具有重复元数据的离散值,我不想将表格归一化分成两个表格。元数据与数组中的数据“为我做了”。 非常感谢@klin,我现在有了一个概念证明。 – SteamedUp
还有一点,数据按照阵列中的位置顺序出来非常重要。在本例中,数组中位置0处的数据是在原始时间戳中指定的确切时间;位置99中的数据是原始时间戳后99分钟的数据。 即,数据的时间戳是从它在数组中的位置隐含的。 – SteamedUp