我需要在客户级别创建信用余额账龄报告。
笔记:
账龄基于客户的最后付款日期。
一个客户可以有多个帐户,有时会出现将付款应用到错误帐户的错误。例如,账户余额为 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'...
我打算在 max(TRANSACTIONS.POST_DATE) 和 "yesterday" - DATEADD(dd,-1,getdate()) 之间使用 DATEDIFF 函数使用 CASE 语句来创建存储桶。
但是,在执行存储桶总和和计数计算之前,使用变量或存储过程根据最后付款日期来分离客户不是更有效吗?
关于如何准确有效地做到这一点的任何想法?到目前为止,我一直在通过一个简单的查询来获取具有信用余额的客户以及他们的最后付款日期,然后自己使用 Excel 创建老化桶。