Использование функции LAG для создания записей для клиента - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть настройки ниже, которые используются для объяснения проблемы

Здесь автомобиль является автомобилем по умолчанию, купленным, если другой автомобиль не куплен

Логика такова: если есть массовый платеж, то он должен быть распределен по транспортным средствам по дебетовому клиенту

Фактическая транзакция происходит как показано ниже

bought date              Bought   Credit_Acc  Debit Customer  paid_date
-----------              ------   ----------  --------------  ----------
 1-jan-2019              Bike      10k         0             03-Jan-2019
 2-jan-2019              cycle     20k         0             03-Jan-2019
 3-jan-2019              Car       30k        60k            03-Jan-2019

Но Клиент хочет, чтобы финансовый отчет был таким, как показано ниже

 bought date             Bought   Credit_Acc  Debit Customer  paid_date
-----------              ------   ----------  --------------  ----------
 1-jan-2019              Bike      10k         10k             03-Jan-2019
 2-jan-2019              cycle     20k         20k             03-Jan-2019
 3-jan-2019              Car       30k         30k             03-Jan-2019

Также иногда, если он платит только 15 КБ, которые зарегистрированы по дебетовому клиенту на 03 января 2019 года дата покупки должна составлять

 bought date             Bought   Credit_Acc  Debit Customer      paid_date
-----------              ------   ----------  --------------  ----------
 1-jan-2019              Bike      10k         10k                 03-Jan-2019        
 2-jan-2019              cycle     20k         5k                  03-Jan-2019    
 3-jan-2019              Car       30k         0(15k actual data)  03-Jan-2019            

Таким образом, после этого платежа в 15 000, еще один платеж в 15 000 будет произведен 04 января 2019 г., тогда в базовой таблице дебетового клиента будет записано 30 000, но в отчете должно быть указано следующее

 bought date             Bought   Credit_Acc  Debit Customer      paid_date
-----------              ------   ----------  --------------  ----------
 1-jan-2019              Bike      10k         10k                04-Jan-2019        
 2-jan-2019              cycle     20k         20k                04-Jan-2019
 3-jan-2019              Car       30k         0(30k actual data) 04-Jan-2019            

Затем, после этого платежа, 30 января 2019 года будет произведено еще 30 тыс., После чего 60 тыс. Будет записано в таблицу базовых дебетовых клиентов, но в отчете должно быть указано следующее

 bought date             Bought   Credit_Acc  Debit Customer        paid_date
-----------              ------   ----------  --------------  ----------     
 1-jan-2019              Bike      10k         10k                 05-Jan-2019        
 2-jan-2019              cycle     20k         20k                 05-Jan-2019
 3-jan-2019              Car       30k         30k(60k actual data)05-Jan-2019            

СТРУКТУРА СТОЛОВ

VALUE DATE (bought date/paid date)  
ITEM (Bought)  
Debit_Entry (Debit Customer) 
Credit_Entry (Credit_Acc)

1 Ответ

2 голосов
/ 09 апреля 2019

Трудно сказать по вашему вопросу, поскольку данные базовой таблицы все еще не показаны, но похоже, что вы хотите что-то вроде:

select value_date, item, credit_entry, item_paid
from (
  select value_date, item, credit_entry, debit_entry,
    greatest(0, least(credit_entry, nvl(sum(debit_entry) over (), 0)
      - nvl(sum(credit_entry) over (order by value_date
          rows between unbounded preceding and 1 preceding), 0))) as item_paid
  from your_table
)
where item is not null;

дб <> скрипка

Для каждой строки в таблице она суммирует общую сумму дебета и вычитает общую сумму кредита до (но не включая) этой строки. Если тот общий платеж больше, чем кредит текущей строки, тогда значение кредита используется как есть; если он отрицательный (потому что текущий товар вообще не был оплачен), вместо него используется ноль; в противном случае используется вычисленное значение, которое является суммой кредита этого элемента, который был погашен - после рассмотрения всех предыдущих элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...