2017-01-24 65 views
2

我有一个名为loan_emi的表。我想要选择最后一个emi付款日期,最后一个emi日期,总帐号。 emi,没有。的付费emi和没有。未付的emi。这是我的查询。简化多个子查询

SELECT MAX(emi_date)AS pay_date, 
    (SELECT MAX(emi_date) FROM loan_emi WHERE l_id=a.l_id AND is_paid=0 
)AS last_date, 
    (SELECT COUNT(id) FROM loan_emi WHERE l_id=a.l_id 
)AS tenor, 
    (SELECT COUNT(id) FROM loan_emi WHERE l_id=a.l_id AND is_paid=1 
)AS paid, 
    (SELECT COUNT(id) FROM loan_emi WHERE l_id=a.l_id AND is_paid=0 
)AS unpaid 
FROM loan_emi a 
WHERE id =" + lId + " 
AND is_paid=1 GROUP BY l_id 

但这里有多个子查询。请帮我简化一下。提前致谢。

+0

请问您是否包含一些最小样本数据? –

回答

3

只是放入一个查询与一个案件/当每个领域。通过这种方式,对于所讨论的ID的所有记录来说,只需一次传递,不需要连接,也不需要子查询。此外,因为我拥有它,所以您可能需要参数化您的查询,请注明所需帐户的ID号...

SELECT 
     MAX(case when is_paid = 1 then emi_date else null end) as Pay_Date, 
     MAX(case when is_paid = 0 then emi_date else null end) as Last_Date, 
     COUNT(*) as Tenor, 
     SUM(case when is_paid = 1 then 1 else 0 end) as Paid, 
     SUM(case when is_paid = 0 then 1 else 0 end) as Unpaid 
    from 
     loan_emi 
    where 
     id = ?ParameterizeYourIncomingID 
    group by 
     l_id 
+0

这实际上可能是OP想要的,但这与原始查询AFAIK不同。 –

+0

@TimBiegeleisen,谢谢。错过了“L_ID”列中的群组 – DRapp

+0

谢谢@DRapp!这就是我要的。 –