2017-08-24 64 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 |月|周期| + ---- + ------------- + ---------------- + | 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

在你的问题中没有问题。 – 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; 

...或者类似的东西