Мне нужно создать отчет о старении кредитных остатков на уровне клиента.
Примечания:
Срок действия зависит от даты последней оплаты покупателем.
У клиента может быть несколько учетных записей, и иногда возникают ошибки, когда платеж применяется не к тому счету. Например, клиент с балансом 15 долларов на счете совершает платеж в размере 15 долларов. Этот платеж в размере 15 долларов может быть применен к неправильной учетной записи, в результате чего у клиента останется -15 долларов на одном счете и 15 долларов на другом. Этого клиента нужно исключить из отчета.
SQL для получения клиентов с кредитным балансом:
SELECT
ACCOUNT.CUST_ID
, sum(ACCOUNT.BALANCE)
FROM ACCOUNT
GROUP BY ACCOUNT.CUST_ID
HAVING sum(ACCOUNT.BALANCE) < 0
SQL для получения последней даты платежа:
SELECT
TRANSACTIONS.CUST_ID
, MAX(TRANSACTIONS.POST_DATE)
FROM TRANSACTIONS
WHERE TRANSACTIONS.TX_TYPE = 'PAYMENT'
GROUP BY TRANSACTIONS.CUST_ID
Мне нужно создать столбцы для ведер выдержки, например:
«0–30» СУММА КРЕДИТНОГО БАЛАНСА
'0–30' КРЕДИТНЫЙ БАЛАНС СЧЕТЧИК КЛИЕНТОВ
'31 - 60'...
Я собирался использовать операторы CASE, используя функцию DATEDIFF между max (TRANSACTIONS.POST_DATE) и «вчера» - DATEADD (dd, -1, getdate ()) для создания сегментов.
Однако не было бы намного эффективнее сделать это с использованием переменных или хранимой процедуры, чтобы разделить клиентов на основе последней даты платежа перед выполнением подсчета суммы и подсчета корзины?
Есть идеи, как это сделать точно и эффективно? До сих пор я отбирал клиентов с кредитным балансом вместе с датой последнего платежа с помощью простого запроса, а затем сам создавал сегменты устаревания с помощью Excel.