当月的运行总和,以累计运行总金额为上限

问题描述 投票:0回答:1

我想创建一个报告,其中包含特定月份的总交易金额,但是仅当该帐户的总金额小于该帐户的特定上限时才显示。对于任何会超出上限的附带交易,我只显示金额低于上限的部分。下面是一个示例。

这必须与版本5.6.24兼容

CREATE TEMPORARY TABLE Example(
   ID int,
   Date DATE,
   AMT FLOAT(8,2)
);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (1, '20190101', 1000);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (1, '20190123', 1000);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (1, '20190201', 1000);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (2, '20180202', 2000);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (2, '20190115', 1500);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (2, '20190501', 1000);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (2, '20190502', 750);
INSERT INTO Example(ID, Date, AMT) 
            VALUES (2, '20190505', 800);

数据具有以下格式,并假设我每个ID的累计上限为5000。

ID     |    Date     |    AMT     |
 1     |  1/1/2019   |   1000     |
 1     |  1/23/2019  |   1000     |
 1     |  2/1/2019   |   1000     |
 2     |  2/2/2018   |   2000     |
 2     |  1/15/2019  |   1500     |
 2     |  5/1/2019   |   1000     |
 2     |  5/2/2019   |   750      |
 2     |  5/5/2019   |   800      |

截至2019年1月1日,我希望看到返回以下结果,这是微不足道的:

ID     |    Date     |  CM_AMT    |  RUNNING
 1     |  1/1/2019   |   1000     |  1000
 1     |  1/23/2019  |   1000     |  2000
 2     |  1/15/2019  |   1500     |  3500

但是,自2019年5月31日起,我希望看到:

ID     |    Date     |  CM_AMT    |   RUNNING
 2     |  5/1/2019   |   1000     |   4500
 2     |  5/2/2019   |   500      |   5000

因为没有ID为1的交易,所以不应显示任何记录。对于ID 2,我们从开始就拥有运行总计。达到上限后的所有记录都将被删除,因此没有5/5/2019记录。而且我们只记录交易的一部分,然后才刺穿总金额,即:5/2/2019记录是500,而不是750

mysql sql
1个回答
0
投票

如果您正在运行MySQL 8.0,则可以进行窗口求和并以此进行过滤。然后,您可以使用least()调整每个id的最后一条记录的金额(如有必要)。

© www.soinside.com 2019 - 2024. All rights reserved.