问题
I need to subtract first row lot_size + substraction result
from currentitems
column. If no balance left then it should be 0. bal
is how result column should look.
rowno | location | lot_size | currentitems | bal | bal_left
-------+----------+----------+--------------+--------+--------
1 | AB1210 | 1200 | 1000 | 1000 | 200
2 | AB1220 | 1200 | 1000 | 200 | 0
3 | AB1230 | 1200 | 500 | 0 | 0
Current approach (using postgresql 9.3.1):
SELECT
row_number() over (ORDER BY location) as rowno,
location,
currentitems,
1200 as lot_size,
--here should be some case or something
COALESCE(lag(currentitems) over(ORDER BY location),currentitems) AS bal
FROM foo;
回答1:
Not sure if that's what you're asking, but here's how you can get next row:
create table a(
id bigserial primary key,
val integer
);
select
nth_value(val,(row_nr+1)::integer) over () as next_value,
val, from
(select row_number() over () as row_nr, val from a) t;
And then you can do your cases and subtractions
来源:https://stackoverflow.com/questions/27899341/how-to-subtract-from-previous-row-result