在视图mysql中计算余额

时间:2014-12-24 17:38:13

标签: mysql view balance

我在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

我想知道如何进行查询,但结果是例如。 &#34; clv_cuotas = 115&#34 ;.因此是结果。

  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

1 个答案:

答案 0 :(得分:0)

如果不重新查询您的查询,问题是运行的总余额需要116以获得适当的平衡,只有在计算了值之后,您才能删除它们。因此,请包含以下查询:

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

这样,内部行就会根据所有clv_cuto值计算出来,并且只排除AFTER-the-fact。

注意:这应该显示您对第一个查询所期望的正确余额,只返回那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;