繁体   English   中英

SQL 查询重新计算运行总计

[英]SQL Query Recalculating Running Totals

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

  1. 检查到目前为止的(新)总金额。
  2. 如果将此金额添加到先前的总数会使总数小于零,则新的金额字段应为零。 否则,它应该等于旧金额。

这是我正在寻找的一个例子——

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 小于 0,因此我将新金额设置为 -100。

我的第三个金额是-200。 这将使 0 到 -200,< 0 的运行总数。因此,我将新数量设置为 0。

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

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

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

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

我认为您可以通过设置公用表表达式以进行递归查询来做到这一点,但我已经不知道如何准确地创建它。 如果可能的话,我想避免使用游标。

这是一个带有包装CASE语句的WINDOW FUNCTION解决方案。

查找LAG

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM