我想做以下事情: 起始余额为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
答案 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”。