【发布时间】:2018-03-21 17:03:25
【问题描述】:
我需要确定一个非贷款计划启动者的客户,这意味着他没有支付第一个 EMI 计划。我需要知道谁是 10 EMI Schedules 而不是付费客户。
注意:这需要通过简单的查询语句来实现。我不能使用 PARTITION、OVER、LAG 类的关键字。我可以使用 UNION、JOIN、LEFT JOIN 和 INNER JOIN。
对于第一个非入门客户,我写了一个这样的查询,但我怀疑我遗漏了一些记录:
SELECT a.LoanID,
if(Case when a.SchedulePaymentDate = b.TransactionDate AND a.DemandAmount - b.Collectionamount = 0 then a.InstallmentNo end, 0, 1) as NonStarter
FROM Schedule a
JOIN Collection b ON a.LoanID = b.LoanID AND a.InstallmentNo = 1
我不确定这是否有效,但我正在做的是,检查第一个计划日期和收款日期匹配并从需求中减去收款金额应该为零,然后我说的是标志 0贷款起始者,否则标志为 1,因此他是贷款的非起始者。
对于第二个,我们如何确定我们是否收集了 10 个 EMI/Schedule? 我可以编写查询以获取 10 个 EMI 之前的汇总值和第 10 个 EMI 的日期,但我不知道如何加入或应用已收集这 10 个 EMI 需求的条件?我需要知道是否收集了 10 个 Emis 的两个 lOans。 EMI 时间表通常为 18 至 24 个月。
请给我一个更好的方法,不要错过任何贷款,无论是贷款起始者还是非起始者。
下面给出的表模式:
Schedule: LoanID, PaymentDate, DemandAmount, InstallmentNo
Collection: LoanID, TransactionDate, CollectionAmount
提前致谢。
【问题讨论】:
-
您使用的是哪个DBMS? “SQL”只是一种查询语言,并不是特定数据库产品的名称(SQL 中也没有
IF)。请为您正在使用的数据库产品添加标签postgresql、oracle、sql-server、db2、... -
它的 SQL Query 语言只有我在使用,但 Zoho Reports 系统接受 IF 条件,因此我使用了它。它不是 Mysql、Oracle、SQL Server 什么都不是,只是它使用的 SQL 查询语言。