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