1

特定の列によって一意に識別されるテーブルからすべての行と列を返すシンプルでエレガントな方法を見つけようとしています。

言い換えると。テーブルに次の列と行があると想像してください...そして、すべての一意の重複 ID 行が必要でした...

id | duplicateID |Name | col1 | col2 | col3

1  |  1          |A    |B     | C    | D
2  |  1          |A    |B     | C    | D
3  |  3          |A    |B     | C    | D
4  |  3          |A    |B     | C    | D
5  |  1          |A    |B     | C    | D
6  |  5          |A    |B     | C    | D
7  |  5          |A    |B     | C    | D
8  |  6          |A    |B     | C    | D

ID 1、3、6、および 8 のすべてのレコードが返されるようにします。これらはすべて、重複レコード列からの一意の ID であるためです。しかし、それらの行のすべてのレコードも必要です。これを簡単に行う方法はありますか?私はそうは思いません...これまでのところ、いくつかの複雑なクエリを作成しましたが、良い結果は得られませんでした。私は言わなければならないSQLの専門家ではありません。

アップデート

1  |  1          |A    |B     | C    | D
3  |  3          |A    |B     | C    | D
6  |  5          |A    |B     | C    | D
8  |  6          |A    |B     | C    | D

私が必要とするサンプル結果になります。これはすべてOracleテーブル用です。

4

2 に答える 2

3

次のような分析を使用できます

select id, duplicateid, name, col1, col2, col3
  from (select id, duplicateid, name, col1, col2, col3,
               row_number() over (partition by duplicateid order by id) rn
          from your_tab)
 where rn = 1;

フィドル: http://sqlfiddle.com/#!4/c38b1/1

于 2013-03-06T22:18:49.067 に答える
0

私は質問を理解しているかどうかわかりませんが、ここに行きます:

         select * from T
         inner join
         (
         select distinct duplicateID from T
         ) as V
         on T.id = V.duplicateID
于 2013-03-06T22:19:57.457 に答える