Рассчитать текущий баланс за кубу в 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