Рассчитать текущий баланс за кубу в MySQL View

У меня есть представление в MySQL Я пытаюсь сделать запрос и сгруппировать их по clv_cuota, но результат не так, как ожидалось. Я попробовал этот запрос.

SELECT m.`id_cuota`, m.`clv_cuota`, m.`debe`, m.`haber`,
(select sum(debe) - sum(haber) FROM cuotas m2
 where m2.id_cuota <= m.id_cuota 
) as balance
FROM `cuotas` m
GROUP BY m.clv_cuota,  m.`id_cuota` DESC;

но полученный результат таков:

id_cuota     clv_cuota     debe     haber     balance
21             115         0.00    150.00      100.00
20             115        50.00      0.00      250.00
18             115       100.00      0.00      100.00
23             116        50.00      0.00      150.00
19             116       100.00      0.00      200.00

Я создал SQLFiddle, где вы можете получить эту схему с примерами данных, где вы можете проверить запрос

я имею в виду, что правильный результат таков, как если бы каждая группа clv_cuota начала новый независимый баланс

id_cuota     clv_cuota     debe     haber     balance
21             115         0.00    150.00        0.00
20             115        50.00      0.00      150.00
18             115       100.00      0.00      100.00
23             116        50.00      0.00      150.00
19             116       100.00      0.00      100.00

Что я могу делать не так?

2 ответа

Это запрос, который я хотел. Спасибо.

SELECT m.`id_cuota`, m.`clv_cuota`, m.`debe`, m.`haber`,
(select sum(debe) - sum(haber) FROM cuotas m2
where m2.id_cuota <= m.id_cuota and 
m2.clv_cuota = m.clv_cuota 
) as balance
FROM `cuotas` m
GROUP BY m.clv_cuota,  m.`id_cuota` DESC;
SELECT id_cuota
     , clv_cuota
     , debe
     , haber
     , balance
  FROM 
     ( SELECT x.id_cuota
            , x.clv_cuota
            , x.debe
            , x.haber
            , CASE WHEN x.clv_cuota = @prev 
                   THEN @balance := @balance+(x.debe-x.haber)
                   ELSE @balance := (x.debe-x.haber)
                   END balance
            , @prev := x.clv_cuota
          FROM cuotas x
             , (SELECT @prev:='',@balance:=null) vars
         ORDER
            BY x.clv_cuota
     , x.id_cuota
     ) a
 ORDER
    BY clv_cuota,id_cuota DESC
Другие вопросы по тегам