2017-02-23 5 views
1

私は以下の形式のデータを持っており、出力をフィルタリングするのに助けが必要です。複数の組み合わせを試みたが、私が持っているデータは、2つの行の間のテキストが同じである場合、私はその行の最初の発生を選択する必要があり、テキストが異なっている場合、私がしなけれいくつかの値に応じてオラクルフィルタ行が表示されます

User Id Comments    Status Date  Set# 
123  First Edit    E  22-Feb-17 0 
123  First Edit    E  22-Feb-17 55 
123  First Edit    X  22-Feb-17 55 
123  First Edit    X  22-Feb-17 55 
123  Second Edit    X  22-Feb-17 55 
123  Second Edit    X  22-Feb-17 55 

ある

介して得ることができませんでした両方を選択します。

出力は

User Id Comments    Status Date  Set# 
123  First Edit    E  22-Feb-17 0 
123  Second Edit    X  22-Feb-17 55 
+0

あなたはStatus = 'X'とSet#= 55というより、コメント= '最初の編集'のためにステータス= 'E'とセット番号= 0の行を選ぶでしょうか? (ヒープ・テーブルには特別な順序がないので、結果が特定の列に指定されている場合を除き、何も意味しません) – Boneist

+1

'rank()OVER([query_partition_clause ] ORDER BY句) 'あなたのクエリ – edt

答えて

2

のようになります。私はあなただけrow_number()をしたいと思う:

select t.* 
from (select t.*, 
      row_number() over (partition by userId, comments order by date) as sequm 
     from t 
    ) t 
where seqnum = 1; 

注:あなたは "その行の最初の発生を選択する" と言います。 SQLテーブルは、の順序で並べ替えられていないので、の最初の文字はです。この回答は、dateに実際にあなたが意図する順序を指定する時間成分があると仮定しています。

+0

はい上記の日付値は' timestamp'カラムであり、ランクを実行してから第1ランク – TRR

関連する問題