2017-01-24 63 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!這就是我要的。 –