2017-08-24 3 views
-2

Ich habe eine Tabelle wie folgt. Ich muss für jeden Benutzer Werte kumulieren, aber die Kumulation bei einer Pause im Monat beenden.MySQL: Cumulate Werte basierend auf 2 Spalten

Eingang:

+----+-------------+----------------+ 
| id | month  | period   | 
+----+-------------+----------------+ 
| A | 2015-09-01 |    0 | 
| A | 2015-10-01 |    1 | 
| A | 2015-11-01 |    15 | 
| A | 2016-04-01 |    2 | 
| A | 2016-05-01 |    0 | 
| B | 2015-09-01 |    0 | 
| B | 2015-10-01 |    1 | 
| B | 2015-12-01 |    15 | 
| B | 2016-01-01 |    2 | 
+----+-------------+----------------+ 

Ausgang:

+----+-------------+----------------+-----------------------+ 
| id | month  | period   | result column   | 
+----+-------------+----------------+-----------------------+ 
| A | 2015-09-01 |    0 |      0 | 
| A | 2015-10-01 |    1 |      1 | 
| A | 2015-11-01 |    15 |     16 | 
| A | 2016-04-01 |    2 |      2 | 
| A | 2016-05-01 |    0 |      2 | 
| B | 2015-09-01 |    0 |      0 | 
| B | 2015-10-01 |    1 |      1 | 
| B | 2015-12-01 |    15 |     15 | 
| B | 2016-01-01 |    2 |     17 | 
+----+-------------+----------------+-----------------------+ 
+0

Input: + ---- + ------------- + ---- ------------ + | ID | Monat | Periode | + ---- + ------------- + ---------------- + | A | 2015-09-01 | 0 | | A | 2015-10-01 | 1 | | A | 2015-11-01 | 15 | | A | 2016-04-01 | 2 | | A | 2016-05-01 | 0 | | B | 2015-09-01 | 0 | | B | 2015-10-01 | 1 | | B | 2015-12-01 | 15 | | B | 2016-01-01 | 2 | + ---- + ------------- + ---------------- + –

+0

Es gibt keine Frage in Ihrer Frage. – gdir

+0

Ich möchte eine Abfrage schreiben, um die Ausgabe zu erhalten, die ich gepostet habe –

Antwort

0

ZB:

SELECT x.* 
    , CASE WHEN @prev_id = id 
     THEN CASE WHEN @prev_month = month - INTERVAL 1 MONTH 
      THEN @i := @i+period ELSE @i := period END 
      ELSE @i := 0 END i 
    , @prev_id := id 
    , @prev_month := month 
    FROM my_table x 
    , (SELECT @prev_id:=null,@prev_month:=null,@i:=0) vars 
ORDER 
    BY id 
    , month; 

... oder so ähnlich

Verwandte Themen