2017-08-01 66 views
1

我按日期執行累計和金訂單,但沒有得到預期的結果。與用於總和的訂單相比,某些記錄以不同的順序呈現。按日期排序的MySQL累計金額

Please have a look at SQL Fiddle

我希望以下兩種結果:

2015-05-05T00:00:00Z 50 30 20 90

2015-05-05T00: 00:00Z 60 30 30

2015-05-04T00:00:00Z 70 50 20 30

2015-05-04T00:00:00Z 80 40 40 70

2015-05-03T00 :00:00Z 30 20 10 10

或順序如下:

2015-05-05T00:00:00Z 60 30 30 120

2015-05-05T00:00:00Z 50 30 20 90

2015-05-05T00:00:00Z 60 30 30 120

2015-05-04T00:00:00Z 80 40 40 70

2015-05-04T00:00:00Z 70 50 20 30

2015-05-04T00:00:00Z 80 40 40 70

2015-05-03T00:00:00Z 30 20 10 10

(增加)請注意負值也是可以的。這就是爲什麼我在下面提到的答案中提到的一個累積和的命令不能解決問題的原因。作爲一個例子,我會稍微修改的結果:

2015-05-05T00:00:00Z 30 60 -30 60

2015-05-05T00:00:00Z 50 30 20 90

2015-05-04T00:00:00Z 80 40 40 70

2015-05-04T00:00:00Z 70 50 20 30

2015-05-03T00:00:00Z 30 20 10 10

感謝您的幫助。

+2

你的數據是不實際訂購,因爲沒有什麼有關的日期和時間是唯一的。 –

+0

我同意,有相同日期的行。但是,令我驚訝的是,用於打印結果的順序(日期爲2015-05-04的行)不是用於進行累計和的順序(最後一列是相鄰列的累計和)。 –

回答

0

http://sqlfiddle.com/#!9/7204d4/2 給出您的明確輸出..我在查詢後添加了@cum:= @cum + tot_earn_pts - tot_redeem_pts asc。

+0

這不是解決問題。它改變了行的順序,但每行的最後一列不是相鄰行的累積和。 –

0

爲了通過「cum_liability_pts」 DESC添加額外的字段:

SQL Fiddle

SELECT * 
    FROM (
    SELECT date, 
      tot_earn_pts, 
      tot_redeem_pts, 
      tot_earn_pts - tot_redeem_pts AS tot_liability_pts, 
      @cum := @cum + tot_earn_pts - tot_redeem_pts AS cum_liability_pts 
     FROM ( 
     SELECT date, 
       earn_points AS tot_earn_pts, 
       redeem_points AS tot_redeem_pts 
      FROM i_report_total_order 
     /* WHERE website_id = 36 */ 

      ) tots 
     JOIN (SELECT @cum := 0) init 
    ORDER BY date asc 
     ) res_asc 
ORDER BY date desc, cum_liability_pts desc; 
+0

如果由於負值導致累計和減少,這並不能解決問題。 –

+0

您是否刪除了累積和爲負的行? – jainvikram444

+0

我將在上面添加負值的可能情況。 –