Postgresql中的时间序列分析

时间:2014-01-08 16:45:51

标签: postgresql

我有一个包含四个字段的表,一个唯一的int id,一个时间戳,一个值和一个int外键。每个记录对应于传感器测量。我想要做的是创建一个新的表,基于此表的值替换为自该外键的上一个时间戳(每个FK是不同的传感器)以来的时间。

我认为我首先要做一个由FK组成的小组,然后进行排序,但是我有点迷失在哪里。

感谢您提供的任何帮助, 詹姆斯

1 个答案:

答案 0 :(得分:2)

这是一个样本。

create temp table measurements (ts timestamp, sensor int);

insert into measurements
values
 ('2014-01-01 00:00:00', 1),
 ('2014-01-01 00:00:01', 1),
 ('2014-01-01 00:00:02', 1),
 ('2014-01-01 00:00:03', 2),
 ('2014-01-01 00:00:04', 2),
 ('2014-01-01 00:00:05', 2),
 ('2014-01-01 00:00:06', 3),
 ('2014-01-01 00:00:07', 3),
 ('2014-01-01 00:00:08', 3)
;

select sensor,
       ts,
       lag(ts) over (partition by sensor order by ts asc) as previous_measurement,
       ts - lag(ts) over (partition by sensor order by ts asc) as time_since_previous_measurement
from measurements
;

请注意,如果要丢弃自上次测量后的时间为空的样本(即第一个样本),则需要将该查询包装在select * from (select sensor, lag() ...) t where t.previous_measurement is not null等额外查询中。