2017-10-03 14 views
0
Ref Ref1 Processed  process_date 
---------------------------------------------- 
123 xxxx  Y   23-03-2017 12:10:00 
123 zzzz  N   23-03-2017 12:11:10 
123 yyyy  Y   23-03-2017 12:11:10 
123 wwww  Y   23-03-2017 12:11:11 
121 xxxx  Y   23-03-2017 11:10:00 
121 yyyy  N   23-03-2017 11:11:00 
121 zzzz  Y   23-03-2017 11:11:10 
120 xxxx  Y   23-03-2017 11:00:00 

上記のデータの処理済みレコードは、処理日と参照に基づいて2つしか取得できません。最初の2つの処理済みレコードを取得するOracleのクエリ

結果がでなければなりません

123 xxxx Y 23-03-2017 12:10:00 
123 yyyy Y 23-03-2017 12:11:10 
121 xxxx Y 23-03-2017 11:11:00 
121 zzzz Y 23-03-2017 11:11:10 

EDIT:

は、私は2つのレコードをしたいのみ同じ参照

おかげで2つの以上のレコードがある場合は!

+0

あなたがこれまでに試してみましたでしょうか? –

+0

自己結合を使用しようとしましたが、プロセスの日付に合わせる方法がわからず、常にその最初の2つの処理されたレコードが必要です – user1476092

+0

あなたの結果は正しくありません。 '121 yyyy Y 23-03-2017 11:11:00' - 結果に表示されたこのレコードは、サンプルデータに存在しません。 –

答えて

2
SELECT Ref 
    ,Ref1 
    ,Processed 
    ,process_date 
FROM (
    SELECT t.* 
     ,row_number() OVER (
      PARTITION BY ref ORDER BY process_date 
      ) rn 
     ,COUNT(Ref) OVER (PARTITION BY ref) ct 
    FROM yourtable t 
    WHERE Processed = 'Y' 
    ) 
WHERE rn IN (
     1 
     ,2 
     ) 
    AND ct >= 2 
ORDER BY REF DESC 
    ,process_date; 

EDIT:レコード数を制限するために追加のカウントチェック> 2

+0

ありがとう、テーブルに単一のレコードがあってもレコードを返すので、同じrefで2つ以上のレコードがある場合のみ2レコードが必要です – user1476092

+0

質問に表示された結果が正しくありません。 '121 yyyy Y 23-03-2017 11:11:00 - 結果に表示されるこのレコードはサンプルデータ –

+0

に存在しません。正しく、更新された質問 – user1476092

関連する問題