从Oracle表中选择单列唯一的记录

时间:2013-03-06 22:16:43

标签: sql oracle unique

我试图找出一种简单而优雅的方法来返回由某个列唯一标识的表中的每一行和每一列。

换句话说。想象一下,表中有以下列和行......我想要所有唯一的重复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表btw。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我不确定我是否理解这个问题,但这里有:

         select * from T
         inner join
         (
         select distinct duplicateID from T
         ) as V
         on T.id = V.duplicateID