2017-06-13 52 views
1

我有一個查詢返回操作的信用票據(CN)和借項通知(DN),每個CN附帶有兩個或多個DN(由字段payment_plan_id引用)。在分頁時,例如我必須帶10個操作,即10個CN和他們的DN,但是如果我將限制保留在10,它也將計算我必須在查詢中返回的事務的借方記錄。所以,它只會帶來2,3或4次操作,具體取決於信用票據附帶的DN的數量。表排除某些領域的應用限制爲條件

SELECT 
    value, installment, payment_plan_id, model, 
    creation_date, operation 
    FROM payment_plant 
    WHERE model != 'IMMEDIATE' 
    AND operation IN ('CN', 'DN') 
    AND creation_date BETWEEN '2017-06-12' AND '2017-07-12 23:59:59' 
ORDER BY 
    model, 
    creation_date, 
    operation 
LIMIT 10 
OFFSET 1 

例子:

| id | payment_plan_id | value | installment | operation | 
--------------------------------------------------------- 
| 1 | b3cdaede  | 12 | 1   | NC  | 
| 2 | b3cdaede  | 3.5 | 1   | ND  | 
| 3 | b3cdaede  | 1.2 | 1   | ND  | 
| 4 | e1d7f051  | 36 | 1   | NC  | 
| 5 | e1d7f051  | 5.9 | 1   | ND  | 
| 6 | 00e6a0b4  | 15 | 1   | NC  | 
| 7 | 00e6a0b4  | 1  | 1   | ND  | 
| 8 | 00e6a0b4  | 3.6 | 1   | ND  | 

如何限制的限制,使其只考慮NC的?

+1

您按「SELECT」中未包含的列進行排序。這似乎很奇怪。 –

回答

0

那麼,您在上面提供的查詢不能遠程執行您描述的內容。假設你真的想要「最後10個CN和他們的DN」。你也不會解釋CN和DN有什麼共同的字段,所以我會假設這些字段是payment_plan_idinstallment。由於這裏是你將如何得到它:

WITH last_10_cn AS ( SELECT value, installment, payment_plan_id, model, creation_date FROM payment_plant WHERE model != 'IMMEDIATE' AND operation = 'CN' AND creation_date BETWEEN '2017-06-12' AND '2017-07-12 23:59:59' ORDER BY model, creation_date, operation LIMIT 10 OFFSET 1) SELECT last_10_cn.*, dn.value as dn_value, dn.model as dn_model, dn.creation_date as dn_creation_date FROM last_10_cn JOIN payment_plant as dn ON last_10_cn.payment_plan_id = dn.payment_plan_id AND last_10_cn.installment = dn.installment ORDER BY last_10_cn.model, last_10_cn.creation_date, last_10_cn.operation dn.creation_date;

根據實際連接條件調整上述以及如何真正想要的東西進行排序。

順便說一句,你的表結構是什麼給你在這裏的麻煩。 DN實際上應該是一個帶有外鍵的獨立表格。我意識到這不是多數GL做的,但GL模型早於關係型數據庫。