2017-08-24 13 views
-2

私は以下のようなテーブルを持っています。私は各ユーザーの値を累積する必要がありますが、月に休憩がある場合は累積を停止します。MySQL:2列に基づく累積値

入力:

+----+-------------+----------------+ 
| 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 | 
+----+-------------+----------------+ 

出力:

+----+-------------+----------------+-----------------------+ 
| 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

入力のようなもの: + ---- + ------------- + ---- ------------ + | id |月|期間| + ---- + ------------- + ---------------- + | | | 2015-09-01 | 0 | | | 2015-10-01 | 1 | | | | 2015-11-01 | 15 | | | 2016-04-01 | 2 | | | 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

あなたの質問に疑問はありません。 – gdir

+0

投稿した出力を取得するためのクエリを書きたい –

答えて

0

例:

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; 

...またはその

関連する問題