SQL 查询重新计算运行总计

Posted

技术标签:

【中文标题】SQL 查询重新计算运行总计【英文标题】:SQL Query Recalculating Running Totals 【发布时间】:2011-06-30 13:56:50 【问题描述】:

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

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

这是我正在寻找的示例 --

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,这不等于总数

我的第二个数量是 -100,这不会使我的运行总数 100 变为

我的第三个金额是 -200。这将使 0 到 -200,

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

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

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

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

我认为您可以通过设置公用表表达式来进行递归查询,但我对如何创建它感到困惑。如果可能的话,我想避免使用游标。

【问题讨论】:

没有看到你是如何进行计算的,很难确定。为什么不能使用MAX( (runningtotal - amount), 0 ) 【参考方案1】:

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

查找LAG

【讨论】:

DB2 实现了 LAG?我要,我要! 流口水 非常感谢您的回复,这看起来是正确的方向,但我能否详细说明如何构建它?我仍在努力确定如何在所涉及的计算中递归使用聚合函数。

以上是关于SQL 查询重新计算运行总计的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中计算运行总计

SQL Server 2012 Windowing 函数计算运行总计

MySQL:如果我在 SQL 查询中多次使用一个函数,每次都会重新计算它吗?

计算 SQL 中日期字段的计数和运行总计

在 SQL Server 中的计算列上运行总计

SQL查询,外连接,cte?需要使用“左”值修复运行总计