2017-06-13 45 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模型早于关系型数据库。