postgresql-SQL 确定期间内未付余额
发布时间:2022-07-27 15:31:14 323
相关标签: # 数据库
我有下表:
/**
| NAME | DELTA (PAID - EXPECTED) | PERIOD |
|-------|-------------------------|--------|
| SMITH | -50| 1|
| SMITH | 0| 2|
| SMITH | 150| 3|
| SMITH | -200| 4|
| DOE | 300| 1|
| DOE | 0| 2|
| DOE | -200| 3|
| DOE | -200| 4|
**/
DROP TABLE delete_me;
CREATE TABLE delete_me (
"NAME" varchar(255),
"DELTA (PAID - EXPECTED)" numeric(15,2),
"PERIOD" Int
);
INSERT INTO delete_me("NAME", "DELTA (PAID - EXPECTED)", "PERIOD")
VALUES
('SMITH', -50, 1),
('SMITH', 0, 2),
('SMITH', 150, 3),
('SMITH', -200, 4),
('DOE', 300, 1),
('DOE', 0, 2),
('DOE', -200, 3),
('DOE', -200, 4)
其中 period 代表时间,1 是最新的,4 是最旧的。在每个时间段,该人都被收取费用和金额,他们可以偿还该金额或更多。负增量意味着他们欠那个时间段。正的增量意味着他们支付的金额超过了预期金额,并且在该时间段内获得了可应用于其他时间段的信用。如果有信用,我们希望首先还清最旧的时间段。我想知道每个时间段仍有多少未偿债务。所以在上面的例子中我想看到:
| NAME | DELTA (PAID - EXPECTED) | PERIOD | PERIOD BALANCE |
|-------|-------------------------|--------|----------------|
| SMITH | -50| 1| -50|
| SMITH | 0| 2| 0|
| SMITH | 150| 3| 0|
| SMITH | -200| 4| -50|
| DOE | 300| 1| 0|
| DOE | 0| 2| 0|
| DOE | -200| 3| -100|
| DOE | -200| 4| 0|
如何使用 Postgres SQL 显示期间内的未偿债务?
附加说明对于 Doe 最初,在最早的时期,欠 200,下一个时期欠原来的 200 加上另外 200(总共欠 400)。在第 2 期,支付了每月费用,但没有支付过去的余额。在最近一个时期 (1) 支付了超过每月金额的 300(其中 200 用于第 4 期中最旧的债务,这意味着它已还清;剩下 100 用于适用于第 3 期的债务;在应用了收回的 100 , 100 还欠)。对于最初在第 4 期的史密斯家族,他们少付了 200 美元。下一个时期,他们当月多付了 150 美元,这适用于最旧的 200 美元债务,剩下 50 美元尚待偿还。在第 2 期,每月的账单都付清了,他们仍然欠第 4 期的 50 美元。然后在第 1 期,他们少付了 50 美元。他们总共欠 100 美元,第 1 期为 50 美元,第 4 期为 50 美元。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报