2017-03-23 12 views
-2

は、私はあなたがロジックを持っていれば、これらのサブクエリはありません日付パラメータoracle sqlの列の最大値を取得する方法は?

     SELECT RELEASE_NUM 
       FROM XXEXTRACT.XXNATGAS_REALSES 
      WHERE RELEASE_ID = 
         (SELECT MAX (RELEASE_ID) 
         FROM XXEXTRACT.XXNATGAS_REALSES 
         WHERE XXEXTRACT.XXNATGAS_REALSES.PO_HEADER_ID = 
           xxr.PO_HEADER_ID 
        AND TRUNC (RELEASE_date) >= 
         NVL (:FROM_DATE, TRUNC (RELEASE_date)) 
        AND TRUNC (RELEASE_date) <= 
         NVL (:TO_DATE1, TRUNC (RELEASE_date))) 
+3

あなたには、いくつかのサンプルデータと欲望の結果 –

+0

を追加する必要がありますどここのスニペットでは、「与えられた日付パラメータ」とは?関連するすべての詳細を提供する必要がある場合は、小さな完全なテストケースが望ましい – APC

+0

あなたは 'xxr'エイリアスを定義していません。私は内側のクエリが相関サブクエリなので、それが外側のクエリであると仮定していますか? – MT0

答えて

0

中に列全体の最大を与える特定の日付パラメータの間にこれらの列の最大値を取得する方法を知りたいです正しい使用して、このような何か:

SELECT RELEASE_NUM 
FROM (
    SELECT RELEASE_NUM, 
     RANK() OVER (PARTITION BY PO_HEADER_ID 
         ORDER BY  RELEASE_ID DESC) AS rnk 
    FROM XXEXTRACT.XXNATGAS_REALSES 
    WHERE (:from_date IS NULL OR :from_date <= TRUNC (RELEASE_date)) 
    AND (:to_date IS NULL OR :to_date >= TRUNC (RELEASE_date)) 
) 
WHERE rnk = 1; 

これは、各PO_HEADER_IDの最高RELEASE_IDですべての行を取得します。単一の最高位の行だけが必要な場合は、ROW_NUMBERの場合はRANKを変更します。

あなただけのすべての行(PO_HEADER_IDの独立した)のための単一の値が必要な場合:

SELECT MAX(RELEASE_NUM) KEEP (DENSE_RANK LAST ORDER BY RELEASE_ID) AS RELESE_NUM 
FROM XXEXTRACT.XXNATGAS_REALSES 
WHERE (:from_date IS NULL OR :from_date <= TRUNC (RELEASE_date)) 
AND (:to_date IS NULL OR :to_date >= TRUNC (RELEASE_date)) 
+0

あなたの答えはありがたいですが、質問をしようとするとまだ最初のレコードとして2番、2番めのレコードで10番の数字が得られます。そして、私はこれらのクエリをメインクエリに入れると、エラーが発生します。「ORA-01427:1行のサブクエリが複数の行を返します。 – Tarek

+0

@Tarek最初のレコードは何ですか? 2番目のレコードは? 2と10はどこから来たのですか?どのような主なクエリですか?ですから、[MCVE]にすべての関連情報を提供することで私たちを助けてください。 – MT0

関連する問題