SQL查询重新计算运行总计

时间:2011-06-30 13:56:50

标签: sql db2

我正在处理一组交易和金额,我想创建一个新的金额列,具有以下逻辑 -

  1. 到目前为止检查(新)金额的累计总数。
  2. 如果将此金额添加到之前的总金额会使总金额小于零,则新金额字段应为零。否则,它应该等于旧金额。
  3. 以下是我正在寻找的一个例子 -

    Item    Record    Old amount  New Amount    Running Total
    1       1         100         100           100
    1       2        -100        -100             0
    1       3        -200           0             0
    1       4         500         500           500
    1       5        -300        -300           200
    1       6         300         300           500
    

    我的跑步总数从零开始。

    我的第一笔金额是100,而不是总数< 0,所以我通过并设置了 新金额为100。

    我的第二个金额是-100,并且这不会使我的总计100到<&lt; 0,所以我将新金额设置为-100。

    我的第三个数额是-200。这将使运行总计0到-200,&lt;因此,我将新金额设为0.

    我的第四笔金额是500.它会通过。

    我的第五个数额是-300。这将使运行总计500到200,仍然> = 0.它将通过。

    我的第六笔金额是300.它会通过,最终总金额为500。

    困难的部分是像这里的纪录五。为了知道最终运行总数不会低于零,您需要计算记录3的新总数。

    我认为你可以通过设置公共表表达式来进行递归查询,但我已经知道如何创建它。如果可能的话,我想避免使用游标。

1 个答案:

答案 0 :(得分:0)

这是一个WINDOW FUNCTION解决方案,其中包含CASE语句。

查找LAG