我知道這裏存在多種此問題的變體,但不以此形式。基本表格中的My Ledger表格具有以下列。總帳表中每一行的主要開始和結束餘額
TransactionID | DateOfEntrydate | TransactionDate | ClientID | TrIsDebit | OpeningBalance | Amount | ClosingBalance
DateOfEntry是存儲事務插入時間的列。 TransactionDate商店僅可手動輸入的交易日期,許多事務可以有相同的TransactionDate所以我在這個順序TransactionDate,DateOfEntrydate排序ASC,TransactionID的
我想保持以前和最終餘額爲每一行(插入,刪除或編輯)。即使我知道這是不可取的,我仍然存儲這些餘額,因爲我需要能夠回顧性地瞭解餘額,即我能夠知道從A日至B日的交易以及每次交易後我的餘額總是給我最後期末餘額。
這樣做是爲了插入當前日期的交易是可以的,可以通過檢查該客戶的最後一筆記錄並將其餘額作爲新的期初餘額輕鬆完成。
我有一個問題,當我編輯,刪除一個交易或插入一個新的「倒退日期」交易。我如何知道在哪個位置插入並更新下方行的餘額?我知道這僅僅是SQL查詢所不可能的。
這次我只是想知道最好的方法來做到這一點。
許多人建議我應該在日期A之前使用SUM()的金額(通過首先檢查其借記卡或信用卡),以便在日期A之前獲得我的期初餘額,但這不是可取的表格非常大。 (目前我正在這樣做,但想要將其更改爲存儲餘額)
任何建議傢伙?
UPDATE 我也想知道如果我用SUM(),什麼是動態生成客戶端每次交易後打開和關閉平衡,不要將其存放在表樣本數據的最佳方式
TransactionID | DateOfEntrydate | TransactionDate | ClientID | TrIsDebit | Amount
225 | 2012-05-06 18:20:10| 2012-03-01 | 360 | 0 | 100
219 | 2012-05-06 18:09:16| 2012-03-31 | 360 | 1 | 1000
224 | 2012-05-06 18:19:49| 2012-03-31 | 360 | 0 | 100
218 | 2012-05-06 18:08:09| 2012-04-30 | 360 | 1 | 1000
221 | 2012-05-06 18:17:55| 2012-04-30 | 360 | 1 | 1000
222 | 2012-05-06 18:18:58| 2012-04-30 | 360 | 0 | 500
220 | 2012-05-06 18:17:10| 2012-05-01 | 360 | 1 | 1000
223 | 2012-05-06 18:19:28| 2012-05-01 | 360 | 0 | 500
顯示爲
TransactionID | DateOfEntrydate | TransactionDate | ClientID | TrIsDebit | "dynamicOpeningBalance" | Amount | "dynamicClosingBalance"
225 | 2012-05-06 18:20:10| 2012-03-01 | 360 | 0 | 0 | 100 |-100
219 | 2012-05-06 18:09:16| 2012-03-31 | 360 | 1 | -100 | 1000 | 900
224 | 2012-05-06 18:19:49| 2012-03-31 | 360 | 0 | 900 | 100 | 800
218 | 2012-05-06 18:08:09| 2012-04-30 | 360 | 1 | 800 | 1000 |1800
221 | 2012-05-06 18:17:55| 2012-04-30 | 360 | 1 | 1800 | 1000 |2800
222 | 2012-05-06 18:18:58| 2012-04-30 | 360 | 0 | 2800 | 500 |2300
220 | 2012-05-06 18:17:10| 2012-05-01 | 360 | 1 | 2300 | 1000 |3300
223 | 2012-05-06 18:19:28| 2012-05-01 | 360 | 0 | 3300 | 500 |2800
需要多少行SUM查詢才能對其性能產生影響?這是我在不久的將來唯一關心的問題。 :)。我也更新了這個問題。如果我使用SUM,我想要那樣的結果。謝謝 – karanits
我不認爲會對性能產生任何「影響」,因爲太多的記錄不會因爲算法問題而減慢速度。據我所知,它只會隨着你正在求和的記錄數而線性減速。成千上萬的記錄應該在幾秒鐘內。我見過只有20秒左右的5,600萬條記錄。真正的問題是你的表格設計得有多好,以及你要求查詢完成的其他事情。 –
好的。得到它了。那麼你可以生成sql查詢來動態獲得上述例子的開盤和收盤餘額嗎? – karanits