2012-01-12 142 views

回答

3

我已經回答了一個很類似的地方,他們試圖在每天的開始/結束時獲得現金流量餘額...... Found here

此致將是非常相似...... Prequery你想要的最終順序的數據它(即:啓動ID將是第一個結果集的),然後申請你想要的東西與MySQL變量

select 
     PreAgg.ID, 
     PreAgg.Amount, 
     @PrevBal := @PrevBal + PreAgg.Amount as Total 
    from 
     (select 
       YT.id, 
       YT.amount 
      from 
       YourTable YT 
      order by 
       YT.id) as PreAgg, 
     (select @PrevBal := 0.00) as SqlVars 

實際上,我已將預彙總保存爲一個查詢......以備實際上每天基於事務執行一些彙總,或者應用其他WHERE子句。這將允許靈活性,以確保您的最終輸出訂單已經準備在開始您的@PrevBal積累之前。

+0

我正在考慮使用遊標和循環的PL/SQL,但這很酷;) – rkosegi 2012-01-12 19:20:36

0

嘗試以下操作:

select 
    *, 
    (select sum(oamount) from `table` WHERE id <= t.Id) AS total 
from `table` AS t 
+2

替換<與<=和祈禱的ID是唯一的:) – Benoit 2012-01-12 19:09:39

+0

@Benoit謝謝! – 2012-01-12 19:11:23

+0

雖然它可以工作,但取決於數據的大小,可能會變得痛苦,5條記錄將不得不在子查詢中計數5 + 4 + 3 + 2 + 1個實例...再次嘗試1000條目... – DRapp 2012-01-12 19:12:15

0
SELECT id,amount,@total := @total + amount 
FROM `table`, (SELECT @total := 0) as dummy 
ORDER BY id; 

請注意,這在使用GROUP BY子句/聚合時不起作用。

0

試試這個:

SET @res:=0; 
SELECT 
    t.a, 
    t.b, 
    (@res := @res + t.b) AS summ 
FROM 
(SELECT first AS a, second AS b FROM table GROUP BY a ORDER BY a) AS t