У меня есть таблица, содержащая данные счета клиента. Я пытаюсь найти, сколько месяцев месяцев определенный тип транзакции присутствует на счете клиента, создавая счетчик переноса. Если транзакция больше не присутствует, счетчик должен сбрасываться до нуля.Oracle - значение приращения
Таблица:
+------------+-------------+----------------+----------+
| 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 |
+------------+-------------+----------------+----------+
То, что я пытаюсь достичь:
+------------+-------------+----------------+----------+-----------+
| 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 |
+------------+-------------+----------------+----------+-----------+
Я предполагаю, что я могу использовать аналитические функции/Oracle КТР?
Спасибо!
добавить:
Накопительное сумма transaction_count со сбросом при 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 |
+------------+-------------+-------------------+----------+-----------+
Благодарим вас за отличный ответ. Предполагая, что transaction_id заменяется не-null transaction_count на счет-фактуру. Перенос будет вместо начала с 1, начнется с transaction_count. Затем перенос вычисляется как текущая строка транзакции transaction_count предыдущей строки + транзакции. Счет 0 в транзакции будет как и раньше сбросить перенос на 0. это можно достичь с помощью аналитической функции LAG? – MrM
Я не уверен, что понимаю, что вы имеете в виду. Пожалуйста, обновите образцы данных и ожидаемый результат в своем вопросе, чтобы продемонстрировать, что вы имеете в виду. На первый взгляд, я думаю, вам просто понадобится 'sum()' вместо 'row_number()', чтобы сделать кумулятивную сумму. Однако, не видя, как выглядят данные, а также ожидаемый результат, трудно сказать, так ли это. – Boneist
не дали ожидаемых результатов. Первоначальный вопрос обновлен выше. – MrM