我有一个包含四个字段的表,一个唯一的int id,一个时间戳,一个值和一个int外键。每个记录对应于传感器测量。我想要做的是创建一个新的表,基于此表的值替换为自该外键的上一个时间戳(每个FK是不同的传感器)以来的时间。
我认为我首先要做一个由FK组成的小组,然后进行排序,但是我有点迷失在哪里。
感谢您提供的任何帮助, 詹姆斯
答案 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
等额外查询中。