यह एक अनुपयोगी, अनुमानित उत्तर है (यदि आपने 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))