我有一個表,看起來像這樣: -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