これはテストされていないおおよその答えです(create table
を提供した場合) およびinsert
あなたのデータ/構造のステートメント、私はそれをテストしたでしょう)。トランザクションテーブルに分岐がないことを前提としています(つまり、link_trx_id
ユニークです)。基本的に、再帰的結合を使用してグループ化、親情報、および順序を取得し、次に分析関数を使用して現在の合計(current_net
)を取得します。 )。以前の合計を取得しようとするよりも(これは可能です)、現在の行のcredit
を単に削除する方が理にかなっているようです。 およびdebit
current_net
から 。
SELECT trx_id,
debit,
credit,
root_amt - cum_debit + cum_credit + debit - credit AS current_gross,
root_amt - cum_debit + cum_credit AS current_net
FROM (SELECT trx_id,
debit,
credit,
SUM(credit) OVER (PARTITION BY event_id ORDER BY lvl) AS cum_credit,
SUM(debit) OVER (PARTITION BY event_id ORDER BY lvl) AS cum_debit,
root_amt
FROM (SELECT trx_id,
debit,
credit,
LEVEL AS lvl,
CONNECT_BY_ROOT (gross_amount) AS root_amt,
CONNECT_BY_ROOT (event_id) AS event_id
FROM transaction t LEFT OUTER JOIN event e ON t.trx_id = e.transaction_id
CONNECT BY link_trx_id = PRIOR trx_id
START WITH link_trx_id IS NULL))