sql >> Database >  >> RDS >> Oracle

Recursieve PL SQL Query Help

Dit is een niet-getest antwoord bij benadering (als u create table had opgegeven) en insert verklaringen voor uw gegevens/structuur, ik zou het hebben getest). Het gaat ervan uit dat er geen vertakkingen zijn in uw transactietabel (dat wil zeggen dat link_trx_id is uniek). Kortom, we gebruiken een recursieve join om de groepering, bovenliggende informatie en volgorde te krijgen, en gebruiken vervolgens analytische functies om een ​​lopend totaal te krijgen (current_net ). In plaats van te proberen het vorige totaal te krijgen (wat we zouden kunnen doen), lijkt het logischer om simpelweg het credit van de huidige rij te verwijderen en debit van het 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))


  1. Selecteer met meerdere tags

  2. MySqlConnection (.NET) gebruiken om SSL-verbinding te maken met MySql-server mislukt bij bepaalde clients

  3. Verbroken verbindingen bij gebruik van node.js/mysql connectionPool

  4. zoeken vanuit meerdere tabellen met één trefwoord in mysql