我有一堆交易(存款/取款),我想跟蹤其運行余額,但訣竅是 - 當余額超過某個余額時,余額的自動化會撇去錢,這樣就不會該帳戶中剩余的現金過多(考慮風險,安全性等)。我正在嘗試計算出這種“略讀”應該發生的最佳水平,這樣我們也不必為帳戶充值。
目標 - 使用 1000 美元的脫脂余額
| ID | 型別 | 數量 | 跑步平衡 |
|---|---|---|---|
| 1 | 訂金 | 100 | 100 |
| 2 | 訂金 | 150 | 850 |
| 3 | 訂金 | 1500 | 1000(封頂) |
| 4 | 退出 | 100 | 900 |
| 5 | 訂金 | 500 | 1000(封頂) |
| 6 | 訂金 | 150 | 1000(仍有上限) |
感謝您提供的任何幫助。
uj5u.com熱心網友回復:
這個問題可以通過recursive cte
WITH CTE AS (
SELECT Id, Type, Amount, Amount AS Balance FROM Transactions WHERE Id = 1
UNION ALL
SELECT Transactions.Id, Transactions.Type, Transactions.Amount,
CASE
WHEN
CASE
WHEN Transactions.Type = 'D' THEN CTE.Balance Transactions.Amount
ELSE CTE.Balance - Transactions.Amount
END > 1000
THEN 1000
ELSE
CASE
WHEN Transactions.Type = 'D' THEN CTE.Balance Transactions.Amount
ELSE CTE.Balance - Transactions.Amount
END
END
FROM Transactions
JOIN CTE ON CTE.Id 1 = Transactions.Id
) SELECT * FROM CTE;
我們在每次余額更新后回圈trow表行并應用條件
SQL在線編輯器
結果:
==== ====== ======== =========
| Id | Type | Amount | Balance |
==== ====== ======== =========
| 1 | D | 300 | 300 |
---- ------ -------- ---------
| 2 | D | 400 | 700 |
---- ------ -------- ---------
| 3 | D | 500 | 1000 |
---- ------ -------- ---------
| 4 | W | 300 | 700 |
---- ------ -------- ---------
| 5 | D | 200 | 900 |
---- ------ -------- ---------
| 6 | W | 500 | 400 |
---- ------ -------- ---------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/507045.html
