2014-03-01 70 views
0

我有一個MySQL表,每個財政年度有一行,並有名爲Profit和CProfit的列。 我想通過將今年的利潤加入去年的累計利潤來累積多年來的利潤。mysql在同一張桌面上更新,獲得累積數字

我在MySQL存儲過程中的語句是:

UPDATE GAME_DETAIL X JOIN GAME_DETAIL Y 
USING (GAME_ID, PLAYER_NO, PRODUCT_NO) 
SET X.CPROFIT=X.PROFIT+Y.CPROFIT 
WHERE X.GAME_ID=ZGAME AND X.YEAR = CY AND X.YEAR=Y.YEAR-1; 

當我運行上面的語句,它的回頭率NULL值,即它拒絕加起來兩個數字。

感謝您的建議。謝謝。 健

+0

考慮提供合適的DDL(和/或sqlfiddle)與期望的結果集合在一起。此外,這只是一個私人的事情,避免使用 - 它變得混亂! – Strawberry

回答

0

我覺得這是最容易寫成一個相關子查詢:

update game_detail gd 
    set gd.cprofit = (select sum(profit) 
         from game_detail gd2 
         where gd2.game_id = gd.game_id and 
          gd2.year <= gd.year 
        ); 

的原因,你的版本不工作是因爲update是一個原子操作。 update將同時在所有行上生效,因此「更新」行在更新時不會看到「當前」行的計算值。