Dies ist eine ungetestete, ungefähre Antwort (wenn Sie create table
angegeben hatten und insert
Aussagen für Ihre Daten / Struktur, ich hätte es getestet). Es wird davon ausgegangen, dass es keine Verzweigung in Ihrer Transaktionstabelle gibt (d. h. diese link_trx_id
ist einzigartig). Grundsätzlich verwenden wir eine rekursive Verknüpfung, um die Gruppierung, übergeordnete Informationen und Reihenfolge zu erhalten, und verwenden dann Analysefunktionen, um eine laufende Summe zu erhalten (current_net
). Anstatt zu versuchen, die vorherige Summe zu erhalten (was wir tun könnten), scheint es sinnvoller zu sein, einfach den credit
der aktuellen Zeile zu entfernen und debit
aus dem 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))