在mysql视图中计算每个couta的运行平衡

时间:2014-12-27 14:08:03

标签: mysql view balance

我在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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;