【发布时间】:2016-09-26 22:56:25
【问题描述】:
我有以下情况:我有一份属于许多投资的交易清单。交易记录包含投资标识符、日期和总金额,但不包含运行余额。
交易表:
+------------+------------+--------+
| Investment | Date | Gross |
+------------+------------+--------+
| A | 2015-01-01 | +200 |
| B | 2015-06-30 | +500 |
| C | 2016-01-10 | +300 |
| A | 2016-08-15 | +100 |
| A | 2016-09-21 | -300 |
+------------+------------+--------+
余额存储在单独的表中,并且始终是最新的:
平衡表:
+------------+------------+
| Investment | Balance |
+------------+------------+
| A | 0 |
| B | 500 |
| C | 300 |
+------------+------------+
我想做的是获得每笔交易的运行余额,以及一次到某个特定点的所有投资。
例如,如果我想显示从 2016 年 1 月 1 日到 2016 年 8 月 31 日的投资 A、B 和 C 的交易,并且有流动余额,我会得到:
结果:
+------------+------------+--------+-------------+
| Investment | Date | Gross | End Balance |
+------------+------------+--------+-------------+
| C | 2016-01-10 | 300 | 300 |
| A | 2016-08-15 | 100 | 300 |
+------------+------------+--------+-------------+
我希望在没有迭代器的情况下理想地执行此操作,因为我认为它效率低下。此外,最好使用余额表并从当前余额向后工作,因为当我通常只需要显示一些和最近的交易时,一项投资可能有许多交易。
非常感谢您的帮助。
【问题讨论】:
-
in Result 你是如何得到 A 的期末余额的?
-
@Kostya 我做了当前余额减去所有交易的总价值:所以,0 - (-300) = 300
标签: sql sql-server iterator