2016-12-15 9 views
0

ここに私のSQLスクリプトです。私は60日以内に請求されていないすべてのアイテムを引き出すことを試みています。 1行しか返さない。どんな考え?ご協力いただきありがとうございます!SELECT item、date日付<sysdate - 60

SELECT oel.ordered_item Part_No, 
     MAX(rca.trx_date) AS "Last Invoice Date" 
FROM oe_order_lines_all oel, 
     ra_customer_trx_all rca 
WHERE rca.trx_date < trunc(sysdate)-60 
GROUP BY oel.ordered_item 
+2

を条件を追加する必要があります。 *常に、適切で明示的で現代的な 'JOIN'構文を使用します。 –

+0

@GordonLinoffが言ったこととあなたの参加条件はどこですか? – Anand

+1

rcaとoelの間の内部結合条件がありません – LONG

答えて

1

あなたは* `FROM`句にカンマを使用しないでください*、ここinner joinである、 '' のこの行のために

SELECT oel.ordered_item Part_No, 
     MAX(rca.trx_date) AS "Last Invoice Date" 
FROM oe_order_lines_all oel, 
     ra_customer_trx_all rca 
WHERE rca.trx_date < trunc(sysdate)-60 --------shoud be a condition connects rca and oel 
GROUP BY oel.ordered_item 
1

理由はわかりませんが、1行だけが返されます。しかし、あなたは参加条件が不足しています。適切なJOIN構文を使用した場合、これは明らかです。

あなたの説明に基づいて、必要なロジックは、より多くのこのようなものです:

SELECT oel.ordered_item as Part_No, 
     MAX(rca.trx_date) AS "Last Invoice Date" 
FROM oe_order_lines_all oel LEFT JOIN 
    ra_customer_trx_all rca 
    ON oel.?? = rca.?? 
GROUP BY oel.ordered_item 
HAVING MAX(rca.trx_date) < trunc(sysdate) - 60 OR MAX(rca.trx_date) IS NULL; 

??は、テーブルを結合するために使用される列です。

関連する問題