【发布时间】:2018-03-01 14:10:42
【问题描述】:
我有一个如下表,其中有一个“ODType”列,该列表明交易是到期(D)或收集(C)金额。由此我需要找出每笔贷款的逾期开始日期和逾期金额。
LoanID OverDueDate TotalAmount ODType
12345 01/10/17 1000 D
12345 01/11/17 500 C
12345 03/12/17 1000 D
12346 01/10/17 1500 D
12346 01/11/17 500 C
12346 03/12/17 1000 C
12346 01/01/18 2000 D
12346 01/02/18 1000 C
示例场景:
- 如果我们采用 LoanID 12345,则逾期开始日期为:01/10/2017 和 逾期金额为:1500
- 如果我们采用 LoanID 12346,则逾期开始日期为: 01/01/2018 逾期金额:1000
我能够获取每个loanId 的逾期金额,但不确定如何获取逾期开始日期。我用以下查询做到了:
SELECT t.LoanID, (t."DemandAmount" -t."CollectionAmount") Overdue
FROM (SELECT
LoanID,
MAX(CASE
WHEN ODType = 'D' THEN ("TotalAmount")
END) AS DemandAmount,
MAX(CASE
WHEN (ODType = 'C') THEN ("TotalAmount")
END) AS CollectionAmount
FROM TXN_OverdueCollection GROUP BY LoanID ) t
如何找出逾期的开始日期,我需要添加哪些附加标准才能将其与逾期金额分开。或者我是否需要完全更改查询以获取过期开始日期和过期金额。
更新: 逾期金额和逾期开始日期计算信息如下:
逾期金额等于会费总和 (D) 减去收款总和 (C)。
假设如果我们使用 LoanID 12345,D 的总和(会费)是 2000,并且 C(集合)只有 500,所以 2000 - 500 = 1500 是到期的,因为 未履行2017年1月10日全额付款,逾期开始 日期仅为 2017 年 1 月 10 日。
- 假设如果我们取 LoanID 12346,D(Dues) 的总和是 3500,C (collection) 是 2500,所以逾期金额是 3500 - 2500 = 1000 和 逾期开始日期是 01/01/18,因为它没有履行到期日期 还没有。
注意: 这需要通过简单的 JOIN OR LEFT OR RIGHT 或 Inner JOIN 查询来实现。不适用于 Partition、LAG、OVER 和 row_Number 关键字,这意味着这些内置函数无法用于编写查询。
感谢任何帮助。
【问题讨论】:
-
if we take LoanID 12345, The Overdue start date is: 01/10/2017 and overdue Amount is: 1500- 你如何计算 1500?12345有 3 条记录,但没有一条是 1500。12346看起来更复杂。 -
@Shawn,感谢您的回复,我已在 UPDATE 下给出了解释。请通过它。
-
所以逾期时间本质上就是
D时D - C = 0的时间? -
为什么
C有过期日期?OverDueDate真的是交易日吗? -
什么类型的 SQL 服务器?微软、甲骨文、MySQL、Postgre,还有什么?