2014-12-27 2 views
-1

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

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 

Что я могу делать неправильно?

+0

Измените свой вопрос, чтобы показать образцы данных, а также желаемые результаты. Логика для получения ваших результатов не ясна. –

+0

Измените вопрос, я надеюсь, что это яснее. Мой английский не очень хорош. спасибо. – Jose

ответ

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

Спасибо, этот запрос работает, как я прошу. , но я получаю сообщение об ошибке при создании представления. это ошибка: Сбой создания схемы: SELECT View содержит подзапрос в предложении FROM. – Jose

+0

Итак, не создавайте представление? Или создайте представление * без * «супер запроса», а затем закажите представление по clv_cuota, id_cuota DESC – Strawberry

0

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

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; 
Смежные вопросы