2016-09-24 48 views
0

我要做到以下幾點: 期初餘額爲1000 第二天購買是500 一天後購買是200減去以前行,然後由新行

我想顯示:

date  Transaction balance 
---------- --------- ------- 
09/20/2016  1000  1000 
09/21/2016  -400  600 
09/22/2016  -200  400 
09/23/2016  -500  -100 
09/24/2016  700  600 

因此,查詢應該減去從餘額列中購買列以獲得新的餘額。

它沒有給我正確的輸出。

任何幫助表示讚賞。

由於


非常感謝MathGuy

+0

第一行有問題。如果起始餘額是1000,購買也是1000,購買必須從餘額中扣除,爲什麼不是第一次購買後的餘額0?奇怪的是購買減少了餘額;實際上是貸款餘額和「購買」實際上是付款嗎?另外,是否允許餘額下降到零以下? – mathguy

+0

我寫錯了標題。 $ 1000是起始餘額,其餘的是交易(我在標題「購買」下寫的) – Amir

+1

好的,可以將餘額降至零以下怎麼樣?你有沒有看到這個問題? – mathguy

回答

0

如果平衡可能降到零,或者如果購買(總量)保證不會超過初始平衡,這是減去一個簡單的事情運行總和(sum(purchases) over (order by date1)) - 或者也可以從「餘額」子句中的[whatever]進行分配 - 從開始餘額開始。

儘管你必須顯示更好的輸入表;我希望這不是結構化的方式,1000和500和300的數量在同一列中,不是通過符號來區分(+爲餘額, - 爲初始餘額),也沒有單獨列顯示金額,「餘額」或「購買」。解釋您的要求的唯一方法是給出「日期」和「購買」列,並且您希望第一筆金額被視爲「初始餘額」,而其他金額視爲「購買」,這是沒有意義的。在這種情況下,問題也可以解決,但首先請澄清你的真實情況。

新增:

隨着進一步的澄清,並從OP更新的輸入數據,問題是解析函數SUM()的直接應用:

select transaction_date, transaction, 
     sum(transaction) over (order by transaction_date) as balance 
from input_table; 

注 - 我沒有使用「日期」作爲列名; 「日期」可以用作列名(但只有付出一定的努力,因爲它是一個保留字),但這是一個非常糟糕的做法。我用「transaction_date」代替。

+0

哦,但是你可以使用一個運行總和:添加到上面的答案。 – mathguy

+0

爲什麼/它沒有幫助?清楚地使用前兩列作爲「輸入」,返回三列的查詢,正如我在ADDED部分中所顯示的那樣,正如您在更新後的表格中所示,所以如果「沒有幫助」,請解釋您的期望輸出是如何不同的從你展示的內容。或者,首先,測試我爲你寫的代碼,看看它不是,實際上,幫助!祝你好運。 – mathguy

+1

好的......這絕對沒有意義。如果您已經總結了交易金額,那麼爲什麼該欄目被稱爲「交易」?顯示你的BASE數據,而不是你寫了一半的解決方案的結果,以及哪些不起作用(正如你自己所說的)。說:這裏是BASE數據,這是我想從中得到的。 – mathguy