sql >> Database teknologi >  >> RDS >> Oracle

Hjælp til rekursiv PL SQL-forespørgsel

Dette er et uafprøvet, omtrentligt svar (hvis du havde angivet create table og insert udsagn til dine data/struktur, ville jeg have testet det). Det antager, at der ikke er nogen forgrening i din transaktionstabel (det vil sige, at link_trx_id er unik). Grundlæggende bruger vi en rekursiv joinforbindelse til at få gruppering, overordnet information og rækkefølge, og derefter bruge analytiske funktioner til at få en løbende total (current_net ). I stedet for at prøve at få den forrige total (hvilket vi kunne gøre), ser det ud til at give mere mening blot at fjerne den nuværende rækkes credit og debit fra 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. Sådan ændres postgresql.conf standardværdier på Openshift

  2. SQL til at opdatere medarbejdernes løn med deres afdelings gennemsnitsløn

  3. GRUPPER EFTER og TÆL ved hjælp af ActiveRecord

  4. hvordan konverteres mysql underforespørgsel i yii CDbCriteria?