如何逐步更新列值

时间:2008-10-22 01:48:34

标签: sql

我正在尝试使用个人财务应用程序,而我正在考虑在帐户中输入交易时采取何种方法来更新运行余额。

目前我正在使用的方式涉及检索比插入/修改过的记录更新的所有记录,并逐个递增其运行余额。

例如,给定以下交易:

t1 date = 2008-10-21,金额= 500,运行余额= 1000

t2 date = 2008-10-22,金额= 300,运行余额= 1300

t3 date = 2008-10-23,金额= 100,运行余额= 1400 ...

现在假设我在t1和t2之间插入一个交易,然后t2和所有后续交易需要调整其运行余额。

呵呵,现在我写了这个问题,我想我知道了答案......所以我会把它留在这里以防它帮助其他人(或者甚至可能有更好的方法?)

首先,我从上一个交易获得运行余额,在本例中为t1。然后我更新所有后续交易(包括新交易):

UPDATE transactions
SET running_balance = running_balance + <AMOUNT>
WHERE date > <t1.date>

我看到的唯一问题是,现在我不得不存储时间,而是只存储一个日期。虽然如果两个交易具有完全相同的日期/时间会发生什么?

PS:我更喜欢不涉及专有功能的解决方案,因为我同时使用PostgreSQL和SQLite ......虽然Postgre-only解决方案也很有帮助。

3 个答案:

答案 0 :(得分:2)

那里的某种身份/自动增量列也是明智的,纯粹是为了交易顺序,如果有的话。

此外,除了交易日期之外,将事务插入数据库的日期(并非总是相同)也是明智/有用的。

这些事情只是帮助您安排系统中的事情,并使以后更容易更改事务,即交易。

答案 1 :(得分:0)

如果您有大量交易,那么最好将日期运行余额甚至周/月存储在单独的表中。 如果您要在同一日期插入行,只需更改一行中的运行余额即可。 查询和报告将更加棘手,因为使用每次交易后需要达到余额的运行余额,更像是在最后几天运行余额并增加或减去交易价值。

答案 2 :(得分:0)

我认为这可行:

我使用日期和id来订购交易,但现在我要将日期和ID存储在一列上,并使用它进行排序。因此,使用比较(如&gt;)应始终按预期工作,对吧? (与我之前描述的情况相反,其中两列具有确切的日期时间(但不太可能)。