我有一张桌子account(ID,TransDate,amount,isDebit,balance)
。为了清楚起见,显然这是我桌子的精简版。 TransDate
是条目的日期,isDebit
是一个布尔值,用于表示此交易是否为DEBIT或CREDIT。
当新条目生成时,它可能比最后一个条目更早transDate
,所以我必须将它放在正确的位置并更改将在该位置下方的所有行的余额。在那里,我通过transDate ASC,ID ASC对行进行排序,它给出了正确的条目顺序。
将通过将当前金额添加到上一个上一个余额ID DEBIT来生成余额,并在当前条目为CREDIT时扣除。
它包含以下最后5个条目sorted by transDate ASC , ID ASC
:
帐户(ID,TransDate,金额,isDebit,余额)作为示例
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
,我在其上设置了新的更正余额。
或建议一种新方法来实施这种“分类帐会计”。
答案 0 :(得分:0)
不幸的是,MySQL不支持窗口函数,但您可能能够从之前的涉及存储过程的答案中获得解决方案,因为SQL Server的窗口函数支持对于这种查询来说也太有限了:{{3 }}