Ich habe eine Tabelle mit Kundenrechnungsdaten. Ich versuche herauszufinden, wie viele Monate eine bestimmte Transaktionsart auf einer Rechnung eines Kunden vorhanden ist, indem ich einen Übertragszähler erstelle. Wenn die Transaktion nicht mehr vorhanden ist, sollte der Zähler auf Null zurückgesetzt werden.Oracle - Inkrementwert
Tabelle:
+------------+-------------+----------------+----------+
| Invoice_Id | Customer_id | Transaction_id | Sequence |
+------------+-------------+----------------+----------+
| 253442 | 23334 | | 1 |
| 253443 | 23334 | | 2 |
| 253444 | 23334 | | 3 |
| 253445 | 23334 | | 4 |
| 1050646 | 23334 | | 5 |
| 8457065 | 23334 | | 6 |
| 9052920 | 23334 | | 7 |
| 9333044 | 23334 | | 8 |
| 9616743 | 23334 | | 9 |
| 9894491 | 23334 | | 10 |
| 10186697 | 23334 | | 11 |
| 10490938 | 23334 | | 12 |
| 10803986 | 23334 | 69709477 | 13 |
| 11132317 | 23334 | 72103163 | 14 |
| 11444923 | 23334 | | 15 |
+------------+-------------+----------------+----------+
Was ich zu erreichen versuchen:
+------------+-------------+----------------+----------+-----------+
| Invoice_Id | Customer_id | Transaction_id | Sequence | Carryover |
+------------+-------------+----------------+----------+-----------+
| 253442 | 23334 | | 1 | 0 |
| 253443 | 23334 | | 2 | 0 |
| 253444 | 23334 | | 3 | 0 |
| 253445 | 23334 | | 4 | 0 |
| 1050646 | 23334 | | 5 | 0 |
| 8457065 | 23334 | | 6 | 0 |
| 9052920 | 23334 | | 7 | 0 |
| 9333044 | 23334 | | 8 | 0 |
| 9616743 | 23334 | | 9 | 0 |
| 9894491 | 23334 | | 10 | 0 |
| 10186697 | 23334 | | 11 | 0 |
| 10490938 | 23334 | | 12 | 0 |
| 10803986 | 23334 | 69709477 | 13 | 1 |
| 11132317 | 23334 | 72103163 | 14 | 2 |
| 11444923 | 23334 | | 15 | 0 |
+------------+-------------+----------------+----------+-----------+
Ich nehme an, ich analytische Funktionen/Oracle CTE verwenden kann?
Danke!
add:
kumulative Summe von transaction_count mit zurückgesetzt, wenn transaction_count = 0.
+------------+-------------+-------------------+----------+-----------+
| Invoice_Id | Customer_id | Transaction_Count | Sequence | Carryover |
+------------+-------------+-------------------+----------+-----------+
| 253442 | 23334 | 0 | 1 | 0 |
| 253443 | 23334 | 0 | 2 | 0 |
| 253444 | 23334 | 1 | 3 | 1 |
| 253445 | 23334 | 1 | 4 | 2 |
| 1050646 | 23334 | 0 | 5 | 0 |
| 8457065 | 23334 | 0 | 6 | 0 |
| 9052920 | 23334 | 2 | 7 | 2 |
| 9333044 | 23334 | 1 | 8 | 3 |
| 9616743 | 23334 | 0 | 9 | 0 |
| 9894491 | 23334 | 0 | 10 | 0 |
| 10186697 | 23334 | 0 | 11 | 0 |
| 10490938 | 23334 | 0 | 12 | 0 |
| 10803986 | 23334 | 1 | 13 | 1 |
| 11132317 | 23334 | 1 | 14 | 2 |
| 11444923 | 23334 | 0 | 15 | 0 |
+------------+-------------+-------------------+----------+-----------+
Vielen Dank für eine ausgezeichnete Antwort. Angenommen, transaction_id wird durch not-null transaction_count pro Rechnung ersetzt. Verschleppung wird statt mit 1 beginnen mit transaction_count beginnen. Die Verschleppung wird dann als Transaktionsanzahl vorherige Zeile + Transaktionszählung aktuelle Zeile berechnet. Eine 0 in der Transaktionszählung setzt den Übertrag wie zuvor auf 0 zurück. Ist dies mit der LAG-Analysefunktion erreichbar? – MrM
Ich bin mir nicht sicher, ob ich verstehe, was du meinst. Bitte aktualisieren Sie die Beispieldaten und die erwartete Ausgabe in Ihrer Frage, um zu veranschaulichen, was Sie meinen. Auf den ersten Blick, ich denke, Sie würden nur eine 'sum()' anstelle von 'row_number()', um eine kumulative Summe zu tun. Ohne zu sehen, wie die Daten aussehen, sowie die erwartete Ausgabe, ist es schwierig zu sagen, ob das der Fall ist. – Boneist
ergab nicht die erwarteten Ergebnisse. Erste Frage aktualisiert oben. – MrM