减去前一行,然后是新行

时间:2016-09-24 16:07:41

标签: oracle function plsql

我想做以下事情: 起始余额为1000。 第二天购买量为500。 购买后的第二天是200。

我想要显示:

date        Transaction  balance
----------  ---------  -------
09/20/2016       1000     1000
09/21/2016       -400     600
09/22/2016       -200     400
09/23/2016       -500     -100
09/24/2016        700     600

因此,查询应从余额列中减去购买列以获得新的余额。

它没有给我正确的输出。

感谢任何帮助。

由于

非常感谢MathGuy

1 个答案:

答案 0 :(得分:0)

如果余额可能低于零,或者购买(总计)保证不超过初始余额,那么简单的事情就是减去运行总和(sum(purchases) over (order by date1)) - 或者也可以分配[无论在“结束”条款中 - 从开始平衡。

您必须显示更好的输入表格;我希望这不是你的结构,在同一列中的金额为1000和500和300,没有按标志区分(+为余额, - 用于初始余额)并且没有单独的列来显示金额,“余额”或“购买”。解释您的要求的唯一方法是给出“日期”和“购买”列,并且您希望第一笔金额被视为“初始余额”而其他金额被视为“购买”,这没有任何意义。在这种情况下,问题也可以解决,但首先请澄清你的实际情况。

增加:

通过OP的进一步说明和更新的输入数据,问题是分析函数SUM()的直接应用:

select transaction_date, transaction, 
       sum(transaction) over (order by transaction_date) as balance
from   input_table;

注意 - 我没有使用“日期”作为列名; “date”可以用作列名(但只需付出一些努力,因为它是一个保留字),但这是一个非常糟糕的做法。我改为使用“transaction_date”。