2016-09-13 47 views
0

の中で最も低い位置を有する複製レコードを選択:オラクル - 私は次のような構造を持つテーブルがテーブル

Col1 | Col2 
Qwe | 99 
Rty | 67 
Qwe | 23 
Uio | 66 

表は同じCol1フィールドで重複レコードで構成されています。私はCol2が23と等しいレコードを抽出する必要があり、それはテーブルの中で最も低いレコードを意味します。 Col1の2つ以上のレコードが存在することがあります。特定のCol1値を使用してこれを照会することはできません。 rownumを使用してこれを行うことはできますか?私は現時点でコンピュータにアクセスすることができないので、これを確認することはできません。前もって感謝します!

P.S.電話からの入力... P.S.編集は非常に歓迎され...

答えて

0

以下は元のテーブルです。私は2番目、5番目、6番目、7番目を取得する必要があります。すべての重複しないレコードが必要です。

Col1 | Col2 | Col3 
Qwe | 99 | A 
Rty | 67 | B 
Qwe | 23 | A 
Uio | 66 | C 
Uio | 99 | C 
Asd | 11 | D 
Qwe | 45 | A 

ソリューションは、各レコードの実際のROWNUMと最大ROWNUM含まれ、一時テーブルを作成することでした。

create table my_tab_temp as(
    select mt.*, 
      last_value(rownum) over (partition by mt.col3 order by mt.col3 desc) as max_rownum, 
      rownum "ROW_NUM" 
    from my_tab mt 
); 

そして、私は必要なレコードを選択する:

select * from my_tab_temp mtt 
where mtt.max_rownum = mtt.row_num; 

結果:

Col1 | Col2 | Col3 
Qwe | 45 | A 
Rty | 67 | B 
Uio | 99 | C 
Asd | 11 | D 
0

あなたは

SELECT * FROM table_name WHERE Col2 = 23 GROUP BY Col1, Col2 HAVING COUNT(*) > 1 
+0

「Se 「グループby」が存在する場合には「*」が働きます。少なくともDB2では動作しません。 – mm759

+0

クエリは特定の値を使用してテーブルを照会できません。クエリは、最も低い位置にある重複行を含むすべてのレコードを選択するためです –

0
SELECT * 
FROM table t 
WHERE t.id IN (
    SELECT MIN(t2.Id) 
    FROM table t2 
    WHERE t2.Col2 = 23 
    GROUP BY t2.Col1 
) 

を試してみましたクエリは、主キーで、行番号として使用しますId - カラムがあることを前提としています。そのような列がない場合は、Oracleに「行番号」という概念があるかどうかを確認する必要があります。

関連する問題