如何获得最后的运行余额? [英] How to get the last running balance?

查看:63
本文介绍了如何获得最后的运行余额?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是查询...

+------+----------------+----+----+------------+-----+--------+------+
| seq  | idClient       | i  | WN | fld_Date   | PSF | BAL    | TBAL |
+------+----------------+----+----+------------+-----+--------+------+
| 1483 | SUB-01-1304002 |  1 | 11 | 2013-03-12 | 50  | 50.00  | 0.00 |
| 1486 | SUB-01-1304002 |  2 | 12 | 2013-03-19 | 25  | 75.00  | 0.00 |
| 1489 | SUB-01-1304002 |  3 | 13 | 2013-03-26 | 20  | 95.00  | 0.00 |
| 1492 | SUB-01-1304002 |  4 | 14 | 2013-04-02 | 20  | 115.00 | 0.00 |
| 1495 | SUB-01-1304002 |  5 | 15 | 2013-04-09 | 20  | 135.00 | 0.00 |
| 1498 | SUB-01-1304002 |  6 | 16 | 2013-04-16 | 20  | 155.00 | 0.00 |
| 1501 | SUB-01-1304002 |  7 | 17 | 2013-04-23 | 20  | 175.00 | 0.00 |
| 1504 | SUB-01-1304002 |  8 | 18 | 2013-04-30 | 20  | 195.00 | 0.00 |
| 1507 | SUB-01-1304002 |  9 | 19 | 2013-05-07 | 20  | 215.00 | 0.00 |
| 1510 | SUB-01-1304002 | 10 | 20 | 2013-05-14 | 20  | 235.00 | 0.00 |
| 1513 | SUB-01-1304002 | 11 | 21 | 2013-05-21 | 20  | 255.00 | 0.00 |
| 1516 | SUB-01-1304002 | 12 | 22 | 2013-05-28 | 20  | 275.00 | 0.00 |
| 1519 | SUB-01-1304002 | 13 | 23 | 2013-06-04 | 20  | 295.00 | 0.00 |
| 1522 | SUB-01-1304002 | 14 | 24 | 2013-06-11 | 20  | 315.00 | 0.00 |
| 1525 | SUB-01-1304002 | 15 | 25 | 2013-06-18 | -30 | 285.00 | 0.00 |
| 1548 | SUB-01-1304002 | 16 | 26 | 2013-06-25 | 20  | 305.00 | 0.00 |
+------+----------------+----+----+------------+-----+--------+------+

这是我想显示的输出

+------+----------------+----+----+------------+-----+--------+------+
| seq  | idClient       | i  | WN | fld_Date   | PSF | BAL    | TBAL |
+------+----------------+----+----+------------+-----+--------+------+
| 1548 | SUB-01-1304002 | 16 | 26 | 2013-06-25 | 20  | 305.00 | 0.00 |
+------+----------------+----+----+------------+-----+--------+------+

我已经使用了 max 但它没有用.任何人都可以帮助我解决这些问题.

I already use max but it didn't work. Anyone can help me with these.

这是我的代码

SELECT
MAX(seq) seq,
idClient,
BAL
FROM
(
SELECT
seq,
idClient,
IF (
@idClient = (@idClient := idClient),
@id :=@id + 1,
@id := 1
) i,
WEEKOFYEAR(fld_Date) WN,
fld_Date,
PSF,
IF(@id=1,@BAL:=PSF,@BAL:=@BAL+PSF) BAL,
FORMAT(@TBAL := COALESCE(@BAL*@DD,0),2) AS TBAL
FROM
(
    SELECT
        a.seq,
        a.idClient,
        a. fld_Date,
        a.PSF
    FROM
        (
SELECT
db_lms.lms_savings.seq,
db_lms.lms_savings.idClient,
db_lms.lms_savings.PSF,
db_lms.lms_savings.fld_Date
FROM
db_lms.lms_savings
WHERE db_lms.lms_savings.idClient = 'SUB-01-1304002'
            ORDER BY
                db_lms.lms_savings.idClient,
                db_lms.lms_savings.fld_Date
        ) a
    GROUP BY
        a.seq
    ORDER BY
        idClient,
        fld_Date
) a,
(SELECT @id := 0, @idClient := '', @BAL := 0) B
) z
GROUP BY idClient

推荐答案

尝试

SELECT z.*
  FROM
(
  SELECT seq,
         idClient,
         IF ( 
              @idClient = (@idClient := idClient),
              @id :=@id + 1,
              @id := 1
         ) i,
         WEEKOFYEAR(fld_Date) WN,
         fld_Date,
         PSF,
         IF(@id=1, @BAL:=PSF, @BAL := @BAL + PSF) BAL,
         FORMAT(@TBAL := COALESCE(@BAL * @DD, 0), 2) AS TBAL
  FROM
  (
      SELECT a.seq,
             a.idClient,
             a. fld_Date,
             a.PSF
        FROM
      (
        SELECT db_lms.lms_savings.seq,
               db_lms.lms_savings.idClient,
               db_lms.lms_savings.PSF,
               db_lms.lms_savings.fld_Date
          FROM db_lms.lms_savings
         WHERE db_lms.lms_savings.idClient = 'SUB-01-1304002'
         ORDER BY db_lms.lms_savings.idClient,
                 db_lms.lms_savings.fld_Date
      ) a
       GROUP BY a.seq
       ORDER BY idClient,
                fld_Date
  ) a,
  (SELECT @id := 0, @idClient := '', @BAL := 0) b
) z
 ORDER BY seq DESC
 LIMIT 1;

这篇关于如何获得最后的运行余额?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆