2014-12-24 2 views
0

У меня есть вид в mysql, хорошо работает и корректно отображает результаты.вычислить баланс в виду 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 
    ORDER BY m.`id_cuota` DESC; 


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

Я хотел бы знать, как сделать запрос, но результат, например. "Clv_cuotas = 115". таким образом, является результатом.

id_cuota clv_cuota debe haber  balance 
    22   115  25.00 0.00  25.00 
    21   115  0.00 150.00  0.00 
    20   115  50.00 0.00  150.00 
    18   115  100.00 0.00  100.00 

ответ

0

без переделывания сам запрос, вопрос о том, что общая сумма, остаток ТРЕБУЕТ на 116, чтобы получить правильный баланс, только после того, как значения вычисляются, вы можете удалить их. Таким образом, завернуть в запросе, такие как:

select PQ.* 
    from (your existing query) PQ 
    where PQ.clv_cuto = 115 

Таким образом внутренние строки вычисляются на основе всех значений clv_cuto и только исключены ПОСЛЕ-фактум.

Примечание. Это должно показать правильные балансы, которые вы ожидаете от первого запроса, только вернув только те 115 записей.

Чтобы ответить/уточнить ваши потребности, так как вы заботитесь о чистой активности для учетной записи 115, просто поставьте ее как предложение where. Он должен применяться как к внутренней, так и внешней части запроса.

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 = 115 
    ) as balance 
    FROM `cuotas` m 
    WHERE m2.clv_cuota = 115 
    ORDER BY m.`id_cuota` DESC; 
+0

спасибо за ответ, но все-таки дать мне правильные результаты, я ставлю:. ВЫБРАТЬ PQ * FROM (SELECT m.'id_cuota', m.'clv_cuota', m.'debe', м. 'haber', (выберите сумму (Деб) - сумма (Haber) от cuotas м2 , где m2.id_cuota <= m.id_cuota ) в качестве остатка оТ' cuotas' м ORDER BY m.'id_cuota' DESC) PQ WHERE PQ.clv_cuota = 115 – Jose

+0

Я имел в виду неправильный результат. Я получаю тот же результат, что и второй запрос. – Jose

+0

@Jose, тогда вы можете отредактировать свой исходный вопрос, просто добавив снизу и показывая, что вы EXPECTING, чтобы вернуться в результате. Тогда я и другие могут вам лучше помочь. – DRapp

Смежные вопросы