我有一张如下表: -
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秒。
我想取消该数组,并为每个成员提供一个递增的时间戳(如上所述)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-06-01 00:00:00':: timestamp AS packet_date,ARRAY [0,1,2,3,4,5,6,7,8,9] AS packet_data
我想将一个时间戳推断为上升时间序列,间隔为1分钟;即将单个时间戳排除在10行之外,每个时间戳对应1分钟间隔的每个对应值具有自己独特的timstamp。有点像这样......
packet_date,packet_value(从packet_data中取消)
“2016-06-01 00:00:00”,0
“2016-06-01 00:01:00”,1
“2016-06-01 00:02:00”,2
“2016-06-01 00:03:00”,3
“2016-06-01 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':: timestamp + INTERVAL'10 minutes'),interval'1分钟')
但无法看到如何将其与相应的数组成员/值匹配,可以像这样模拟...
选择不需要(ARRAY [0,1,2,3,4,5,6,7,8,9,10])
这有意义吗?
答案 0 :(得分:2)
你可以将一个时间间隔(在这种情况下是一分钟)乘以一个整数(unnested数组的常数),例如:
with my_table(packet_date, packet_data) as (
values
('2016-06-01 00:00:00'::timestamp, ARRAY[0,1,2,3,4,5,6,7,8,9])
)
select
packet_date + '1m'::interval* (ordinality - 1) as packet_date,
unnest as packet_data
from my_table,
lateral unnest(packet_data) with ordinality;
packet_date | packet_data
---------------------+-------------
2016-06-01 00:00:00 | 0
2016-06-01 00:01:00 | 1
2016-06-01 00:02:00 | 2
2016-06-01 00:03:00 | 3
2016-06-01 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
(10 rows)
答案 1 :(得分:1)
使用with ordinality
:
SELECT x.id, x.x
FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) with ordinality x(x, id);
在您的情况下,您还可以使用row_number()
:
SELECT row_number() over () as id, x.x
FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x(x);