首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:基于财务报告的最后付款日期创建老化桶

SQL:基于财务报告的最后付款日期创建老化桶
EN

Stack Overflow用户
提问于 2012-07-12 13:06:42
回答 3查看 17.5K关注 0票数 4

我需要在客户层面上创建一份信用余额老化报告。

备注:

  1. 老化是基于客户的最后一次付款日期。
  2. 客户可以有多个帐户,有时会出现错误,将付款应用于错误的帐户。例如,帐户上有15美元余额的客户支付15美元。这15美元的支付可能被应用到错误的帐户上,使客户在一个帐户上有一个$-15的余额,而在另一个帐户上留下$15的余额。需要将此客户排除在报表之外。

获得具有信用余额的客户的SQL:

代码语言:javascript
运行
复制
SELECT 
  ACCOUNT.CUST_ID
, sum(ACCOUNT.BALANCE)

FROM ACCOUNT

GROUP BY ACCOUNT.CUST_ID

HAVING sum(ACCOUNT.BALANCE) < 0

获取最新付款日期的SQL:

代码语言:javascript
运行
复制
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语句在max(TRANSACTIONS.POST_DATE)和“昨天”之间使用DATEDIFF函数- DATEADD(dd,-1,getdate())来创建桶。

但是,在执行桶和计数计算之前,使用变量或存储过程来根据最后的付款日期分离客户,这样做不是更有效吗?

对于如何准确有效地完成这一任务,有什么想法吗?到目前为止,我已经在一个简单的查询中收集了有信用余额的客户以及他们最后的付款日期,然后使用Excel自己创建了老化的桶。

EN

Stack Overflow用户

回答已采纳

发布于 2012-07-12 13:48:14

你的方法是正确的。我不知道为什么您认为在存储过程中执行某些操作比在查询中执行更有效。

我想你想要一个查询,比如:

代码语言:javascript
运行
复制
select (case when t.DaysAgo between 0 and 30 then '0-30'
             when t.DaysAgo between 31 and 60 then '31-60'
             else 'OLD'
        end),
       <whatever you want here>
from (SELECT ACCOUNT.CUST_ID, sum(ACCOUNT.BALANCE) as balance
      FROM ACCOUNT
      GROUP BY ACCOUNT.CUST_ID
     ) a left outer join
     (SELECT TRANSACTIONS.CUST_ID, MAX(TRANSACTIONS.POST_DATE) as LastPaymentDate,
             datediff(d, X(TRANSACTIONS.POST_DATE), getdate()) as DaysAgo, 
      FROM TRANSACTIONS
      WHERE TRANSACTIONS.TX_TYPE = 'PAYMENT'
      GROUP BY TRANSACTIONS.CUST_ID
     ) t
     on a.cust_id = t.cust_id 
group by  (case when t.DaysAgo between 0 and 30 then '0-30'
                when t.DaysAgo between 31 and 60 then '31-60'
                else 'OLD'
           end)

通常,您应该让SQL引擎优化查询。它通常是(但绝对不是总是如此!)要把工作做好,让你想想你想要完成的事情。

您将有更多的逻辑来排除某些客户并引入其他字段。

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11452498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档