簡體   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