2017-08-01 15 views
1

累積合計を日付順に実行していますが、期待した結果が得られません。一部のレコードは、合計に使用された順序とは異なる順序で表示されます。MySQLの累積合計注​​文(日付別)

Please have a look at SQL Fiddle

Iは、以下の結果のいずれかの期待:

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

2015-05-05T00ました: 00:00Z 60 30 30

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

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

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 あなたのexpceted出力を与える[email protected]:= @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

上記の負の値のシナリオを追加します。 –