从表中选择最大数量的唯一对

时间:2013-12-10 20:42:57

标签: sql algorithm tsql duplicates duplicate-removal

我有下表:

| a | b |
|---|---|
| 2 | 4 | x
| 2 | 5 | 
| 3 | 1 | x
| 6 | 4 |
| 6 | 5 | x
| 7 | 5 | 
| 7 | 4 | 
|---|---|

我想选择最大数量的唯一对,其中a或b都不重复。所以x旁边的条目应该是select会抓取的。任何想法如何做到这一点?

目前我有一些SQL会做相反的事情,选择那些不唯一的SQL并删除它们但它没有像我想要的那样工作。这是我现在的SQL,但我想我会废弃它,并从我上面提到的角度开始研究它。

delete t
from #temp2 t
    where (exists(select * from #temp2
                 where (b = t.b 
                    and a < t.a))
  or exists(select * from #temp2
                 where a = t.a 
                    and (b < t.b and ) and 
          (not exists(select * from #temp2
                 where b = t.b
                    and a < t.a)
  or not exists(select * from #temp2
                 where a = t.a
                    and b < t.b))

谢谢!

1 个答案:

答案 0 :(得分:0)

我在这里假设非唯一且唯一是互斥的,并且将包含表格中的所有记录。如果是这样,请使用现有脚本,将其写入CTE,然后从源表中加入CTE,选择那些不在CTE中的记录。

With Non_Unique_Records as (
--Insert your existing script here
)

Select t.a
    , t.b

From #temp2 t
    Left Outer Join Non_Unique_Records CTE
        on t.a = CTE.a
            and t.b = CTE.b

Where CTE.b is null

然后只删除Select语句返回的记录。