2011-05-17 45 views
1

我有一个表account(ID,TransDate,amount,isDebit,balance)。为了清楚起见,这显然是我的桌子的一个修剪版本。 TransDate是输入日期,isDebit是一个布尔值,它告诉这个事务是一个DEBIT还是CREDIT。为以下输出生成一个sql查询

一个新的条目被创建时,它可能会有一个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 

谁能生成查询(S):

要创建一个新的条目,并提供以下详细信息:<ID auto> | 2011-05-9 | 1000 | 1 | <balance>

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

或建议实施这种“分类帐会计”的新方法。

回答

0

不幸的是,MySQL有窗功能的支持,但你也许能获得从涉及存储过程,这个以前的答案的解决方案为SQL Server的窗口功能支持该类型的查询太有限,以及:Calculate a Running Total in SQL Server