1

我有一张桌子account(ID,TransDate,amount,isDebit,balance)。显然,为了清楚起见,这是我的表格的精简版。TransDate是进行输入的日期,isDebit是一个布尔值,用于判断此交易是借记还是贷记。

A 当创建一个新条目时,它可能transDate比最后一个条目更旧,因此我必须将其放置在正确的位置并更改将低于该位置的所有行的余额。在那里,我按 transDate ASC 、 ID ASC 对行进行排序,这给了我正确的条目顺序。

余额将通过将当前金额添加到上一个上一个余额 id 借方来生成,如果当前条目是 CREDIT,则扣除。

它有以下最后 5 个条目sorted by transDate ASC , ID ASC

以 account(ID,TransDate,amount,isDebit,balance) 为例

41 | 2011-04-10 | 1000 | 1 | 1000      // as this is the first entry  but not always 

37 | 2011-05-14 | 7500 | 1 | 8500

39 | 2011-05-14 | 6500 | 0 | 2000

46 | 2011-05-15 | 1000 | 1 | 3000

任何人都可以生成查询:

使用以下详细信息创建新条目:<ID auto> | 2011-05-9 | 1000 | 1 | <balance>

查询应该发现新的条目位置在 ID 41 行之后和 ID 37 行之前。并且还从中获取行Id 41因为该行的余额将用于计算新行的余额)并且below我在其上设置新的更正余额。

或者建议一种新的方法来实现这种“分类账会计”。

4

1 回答 1

0

不幸的是,MySQL 不支持窗口函数,但您可能能够从这个涉及存储过程的答案中得出一个解决方案,因为 SQL Server 的窗口函数支持对于这种查询也太有限了:Calculate a Running Total in SQL服务器

于 2011-05-17T07:11:28.430 回答