【发布时间】:2023-03-11 10:03:01
【问题描述】:
请查看下表
EVENT table
event_id | gross_amount | transaction_id
1 | 10 | 1
2 | 12 | 5
TRANSACTION table
trx_id | debit | credit | type | original_trx_id | last_updated
1 | 0 | 0 | payment | null | 25-JUL-11
2 | 0 | 2 | settlement | 1 | 26-JUL-11
3 | 0 | 1 | settlement | 1 | 27-JUL-11
4 | 3 | 0 | settlement | 1 | 28-JUL-11
5 | 0 | 0 | payment | null | 24-JUL-11
6 | 0 | 3 | settlement | 5 | 25-JUL-11
RESULT EXPECTED:
trx_id | debit | credit | current_gross | current_net
2 | 0 | 2 | 10 | 12
3 | 0 | 1 | 12 | 13
4 | 3 | 0 | 12 | 9
6 | 0 | 3 | 10 | 13
说明
事务 1,2,3,4 落入一组,事务 5,6 落入另一组。每个事务集都可以使用最后更新的列进行排序。
对于计算,我们不采用“付款”类型的交易。 “支付”交易链接到事件表。从哪里可以找到“original_gorss_amount”进行计算。
步骤
- 从交易表中查找事件表支付交易。 (例如:transaction_id = 1,也可以从中找到 original_gross_amount = 10)
- 获取所有 original_trx_id = 1 的“结算”交易
- 根据上次更新时间对它们进行排序。
- 应用计算
希望你能理解我的问题。我想以某种方式使用 PL SQL 获得“预期结果”(请不要自定义函数)
我想不出在这里应用 CONNECT BY 的方法。非常感谢您的帮助。
请在下面找到创建表和插入语句。
create table event
(event_id number(9),
gross_amount number(9),
transaction_id number(9) );
insert into event values (1,10,1);
insert into event values (2,10,5);
create table transaction
(trx_id number(9),
debit number(9),
credit number(9),
type varchar2(50),
original_trx_id number(9),
last_updated DATE
);
insert into transaction values (1,0,0,'payment',null,'2011-07-25');
insert into transaction values (2,0,2,'settlement',1,'2011-07-26');
insert into transaction values (3,0,1,'settlement',1,'2011-07-27');
insert into transaction values (4,3,0,'settlement',1,'2011-07-28');
insert into transaction values (5,0,0,'payment',null,'2011-07-24');
insert into transaction values (6,0,3,'settlement',5,'2011-07-25');
【问题讨论】:
-
你能解释一下这个问题与你之前的问题有什么不同吗stackoverflow.com/questions/6863784/recursive-pl-sql-query-help 在我看来它应该作为副本关闭。
-
不。这两个问题是不同的。至少对我来说。在这两种情况下,解决方案的路径可能相似。