计算Mysql中的余额并继续下一行

时间:2016-05-03 11:46:30

标签: mysql

我有以下名为CashFlow的MySQL表,他们有每月贷款帐户详细信息,如月份ID,贷款帐号,分期付款,逾期金额

FMONTH | ACTNO | INSTALLMENT | OVERDUE
--------------------------------------
1      |  1001 |  500        | 10000
2      |  1001 |  500        | 
3      |  1001 |  500        |
1      |  2001 |  1500       | 20000
2      |  2001 |  1500       | 
3      |  2001 |  1500       |

我想按以下方式显示此列表

FMONTH | ACTNO | INSTALLMENT | OVERDUE
--------------------------------------
1      |  1001 |  500        | 10000
2      |  1001 |  500        | 9500
3      |  1001 |  500        | 9000
1      |  2001 |  1500       | 20000
2      |  2001 |  1500       | 18500
3      |  2001 |  1500       | 17000

我正在尝试很多技术但不幸的是我无法在MySQL中完成这个工作

请按照以上格式在MySQL中帮助我如何计算下个月扣除分期付款后的逾期金额。

2 个答案:

答案 0 :(得分:0)

从这开始。在较大的数据集上,使用变量的解决方案会更快,但您可能会使用相同的子查询。

SELECT a.*
     , SUM(b.payments) balance
  FROM 
     ( SELECT x.fmonth
            , x.actno
            , COALESCE(x.overdue,y.installment*-1) payments 
         FROM cashflow x 
         LEFT 
         JOIN cashflow y 
           ON y.actno = x.actno 
          AND y.fmonth = x.fmonth - 1
     ) a
  JOIN
     ( SELECT x.fmonth
            , x.actno
            , COALESCE(x.overdue,y.installment*-1) payments 
         FROM cashflow x 
         LEFT 
         JOIN cashflow y 
           ON y.actno = x.actno 
          AND y.fmonth = x.fmonth - 1
     ) b
    ON b.actno = a.actno
   AND b.fmonth <= a.fmonth
 GROUP 
    BY a.actno
     , a.fmonth;

答案 1 :(得分:-1)

您可以使用:

aggregate function -calculate overdue-installment

 group by   -account number