【发布时间】:2014-11-26 07:39:16
【问题描述】:
考虑以下 2 个表格:
表 A:
PIN | ENCOUNTER | BALANCE | REFERENCE_DATE
------------------------------------------
P1 | ABC | 100 | 11-19-2014
P1 | HJI | 300 | 11-20-2014
P1 | PIY | 700 | 11-21-2014
P2 | CDO | 200 | 11-20-2014
P2 | NHG | 200 | 11-21-2014
P3 | CVB | 500 | 11-20-2014
P3 | SJK | 100 | 11-21-2014
表 B:
PIN | DEPOSIT
-------------
P1 | 1000
P2 | 400
P3 | 100
最初表B的DEPOSIT值将从表A中的BALANCE中减去,最早的REFERENCE_DATE与PIN匹配。如果差值大于 0,则会从下一行的 BALANCE 中减去,直到剩余的 DEPOSIT 小于或等于 0。
从余额中减去存款后的结果如下所示。我已经包括了另一列,其中存款是按遭遇划分的:
PIN | ENCOUNTER | BALANCE | REFERENCE_DATE | DEPOSITS_BREAKDOWN
---------------------------------------------------------------
P1 | ABC | 0 | 11-19-2014 | 100
P1 | HJI | 0 | 11-20-2014 | 300
P1 | PIY | 100 | 11-21-2014 | 600
P2 | CDO | 0 | 11-20-2014 | 200
P2 | NHG | 0 | 11-21-2014 | 200
P3 | CVB | 400 | 11-20-2014 | 100
P3 | SJK | 100 | 11-21-2014 | 0
我的 Postgres 版本是 9.3。我正在努力为这个制定查询。
【问题讨论】:
-
最后的结果行应该是 500,而不是 100。
-
@ErwinBrandstetter,如果是这样,那我就浪费了 30 分钟。这个
100有点难对付。 -
其实最后一行真的是100,分配给A表P3行的100押金已经减去了遇到CVB的那一行。
-
非常感谢先生。但是是否也可以在另一列中列出存款被分割了多少?我已经更新了结果表。
-
是的,这很便宜。另外:您是否知道没有@-reply 没有人收到您的评论通知?偶然发现的。
标签: sql postgresql window-functions