【问题标题】:Apply Limit for a Condition对条件应用限制
【发布时间】:2017-06-14 02:44:27
【问题描述】:

我有一个查询,它返回一个操作的贷方票据 (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        |

如何限制 Limit 使其仅考虑 NC?

【问题讨论】:

  • 您按未包含在SELECT 中的列进行排序。这看起来很奇怪。

标签: sql postgresql


【解决方案1】:

嗯,您在上面给出的查询并没有按照您的描述进行远程操作。假设您实际上想要“最后 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 应该是一个单独的表,具有 CN 的外键。我意识到大多数 GL 不是这样做的,但 GL 模型早于关系数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2018-12-17
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多