2017-06-13 10 views
1

オペレーションのクレジットノート(CN)とデビットノート(DN)を返すクエリがあります。各CNには2つ以上のDN(フィールドpayment_plan_id参照)が付いています。ページング時には、たとえば10個の操作、つまり10個のCNとそのDNが必要ですが、制限を10にすると、クエリで返さなければならないトランザクションのデビットノートもカウントされます。したがって、クレジットノートに付随するDNの数に応じて、2,3、または4つの操作しか表示されません。いくつかのフィールドを未然に防ぐテーブルの条件に制限を適用します。

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 

例:それは唯一のNCを検討するよう

| 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  | 

がどのように制限を制限することができますか?

+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は実際にCNの外部キーを持つ別のテーブルにする必要があります。私はそれがほとんどのGLがそれをする方法ではないが、GLモデルはリレーショナルデータベースに先立つことを認識しています。

関連する問題