фонСумма сделок между различными датами
У меня есть таблица, содержащая операции. Существует два типа транзакций: «обычные записи» (тип = N) и записи «fix» (тип = F). Каждая транзакция имеет идентификатор клиента, дату, код типа и сумму евро. Ниже приведены некоторые примерные данные:
| client_id | date | transaction_type | amount |
|-----------|-----------|------------------|---------|
| 111 | 01jan2015 | N | 1000.0 |
| 111 | 01jan2015 | F | -500.0 |
| 222 | 05mar2015 | N | 2000.0 |
| 222 | 06mar2015 | F | -100.0 |
| 222 | 07mar2015 | F | -100.0 |
| 222 | 09mar2015 | N | 1000.0 |
| 222 | 10mar2015 | N | 400.0 |
| 222 | 15jun2015 | F | -200.0 |
Записи исправлений являются ручными исправлениями для обычных транзакций, совершенных кем-либо из регистра. Они могут быть выполнены в тот же день или после обычной транзакции, но если для одного и того же клиента введена новая нормальная транзакция, все последующие исправления этого клиента относятся к новой транзакции (пока не будет введена еще одна нормальная транзакция). Фактически, все исправления «фиксируют» только последнюю транзакцию этого клиента.
Исправления могут быть положительными или отрицательными, обычные транзакции положительны.
Желаемая выход
То, что я хочу, это набор «нормальных» сделок на клиент, с количеством суммы скорректированного всех исправлениями, связанных с этой сделкой. Пример ниже данные:
| client_id | date | amount |
|-----------|-----------|--------|
| 111 | 01jan2015 | 500.0 |
| 222 | 05mar2015 | 1800.0 |
| 222 | 07mar2015 | 1000.0 |
| 222 | 08mar2015 | 200.0 |
Так что это сумма одной транзакции типа N и всех последовательных F-транзакций вплоть до следующего N-транзакции.
То, что я до сих пор
Если все исправления происходят на ту же дату первоначальной сделки (как это обычно бывает), это очень просто:
select client_id, date, sum(amount)
from transaction_table
group by client_id, date
Однако, У меня возникли проблемы с исправлениями, которые произойдут после исходной даты транзакции, потому что мне нужно выбрать только те, которые происходят до следующей обычной транзакции (и это нужно применять для каждой обычной транзакции).
записку о продуктах в использовании
Я на самом деле с помощью SAS 9.4, но через процедуру прок SQL SAS, я могу применять основные SQL, и это то, что я более комфортно, используя. Ничего особенного (поэтому курсоры, CTE и т. Д.). Хороший ответ SAS тоже будет принят!
Курсоры доступны в SAS SQL. – Reeza
Можете ли вы предположить, что представленный вами заказ будет присутствовать или должен быть учтен в решении? – Reeza
Да, порядок строк может считаться таковым. Спасибо за курсор, я этого не знал. –