Ich habe eine TXN-Tabelle mit Spalten ac_id, txn_amt. Es speichert die Daten txn Beträge zusammen mit Konto-IDs. Im Folgenden finden Sie Beispiel von DatenGruppierung von ähnlichen Daten nach Betrag in Oracle
AC_ID TXN_AMT
10 1000
10 1000
10 1010
10 1030
10 5000
10 5010
10 10000
20 32000
20 32200
20 5000
ich eine Abfrage so schreiben wollen, dass alle Beträge, die zusammen gruppiert werden innerhalb von 10% -Bereich der bisherigen Beträge sollten. Die Ausgabe sollte in etwa so aussehen:
AC_ID TOTAL_AMT TOTAL_CNT GROUP
10 4040 4 1
10 10010 2 2
20 64200 2 3
20 5000 1 4
Ich versuchte mit LAG-Funktion, aber immer noch ahnungslos. Dies ist der Codeausschnitt, den ich versucht habe:
select ac_id, txn_amt, round((((txn_amt - lag(txn_amt, 1) over (partition by ac_id order by ac_id, txn_amt))/txn_amt)*100,2) as amt_diff_pct from txn;
Jeder Hinweis oder Hilfe wird sehr geschätzt.
Wie definieren Sie "vorherige Beträge"? SQL-Tabellen stellen ungeordnete Mengen dar, daher gibt es keine * vorherigen * Zeilen, es sei denn, eine Spalte enthält explizit die Reihenfolge. –
Das ist, warum ich LAG-Funktion verwende, es ist Partitionierung von ac_id und Bestellung von ac_id und txn_amt – Sid