如何从上一行结果中减去? [英] How to subtract from previous row result?

查看:100
本文介绍了如何从上一行结果中减去?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从 currentitems 列中减去第一行 lot_size +减法结果。如果没有余额,则应为0。 bal 是结果列的外观。

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

当前方法(使用PostgreSQL 9.3.1):

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;


推荐答案

不确定这是否是您要的内容,但是以下是获取下一行的方法:

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

这篇关于如何从上一行结果中减去?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆