Just a small correction: there should be time::text>>>'prev_time' for the calculations to be correct:
select * from ( select (((case when time::text = <<<'prev_time' then *0* else *1* end)+(<<<'dense_rank')::int4)::text>>>'dense_rank')::int4 as position, runnerid, time, time::text>>>'prev_time' from big_marathon order by time ) results where position=*2* -- meter_readings select '' >>> 'lag'; select date, reading::numeric-(case lag when '' then null else lag end)::numeric as used from ( select date, <<<'lag' as lag, reading::text >>>'lag' as reading from meter_readings order by date ) as t order by used asc nulls last limit *1* Best regards, Vladimir Sitnikov