create table test ( when date, foo numeric, bar numeric, alice numeric, bob numeric);
insert into test values ('2016-01-01',1,2,3,4); insert into test values ('2016-01-02',5,6,7,8); insert into test values ('2016-01-03',9,10,11,12); insert into test values ('2016-01-04',13,14,15,16); insert into test values ('2016-01-05',17,18,19,20);
I had to rename column "when" into "when_d", as I do not like quoting identifiers.
Try this query with window functions:
SELECT *,lead(foo,4) OVER (ORDER BY when_d),
last_value(foo) OVER (ORDER BY when_d RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM test;
This will give you the ability to lookup needed values.
You'll have to use subquery though, as window functions are evaluated after the `WHERE` clause.