如何在oracle中识别具有数据范围内值的重复行

时间:2014-05-29 01:08:16

标签: oracle duplicates

我想识别Name列中的值相同且start / end列中的值位于另一行的Start和End值范围内的行... 例如。对于ID为4&的行1是重复的,因为它们在Name列中具有相同的值,并且ID 4的起始列26中的值位于start& ID 1的结束值(24-56)

ID名称开始结束

1 Adam 24 56

2 Max 1 5

3 Neil 6 4

4 Adam 26 30

1 个答案:

答案 0 :(得分:0)

您可以使用EXISTS

select * 
from yourtable y
where exists (
  select 1
  from yourtable y2
  where y.id <> y2.id 
    and y.name = y2.name
    and (y2.startfield between y.startfield and y.endfield
         or
         y.startfield between y2.startfield and y2.endfield))

我不能完全确定你的问题是否也必须包括最终范围。如果是这样,您需要将其添加到where条件:

select * 
from yourtable y
where exists (
  select 1
  from yourtable y2
  where y.id <> y2.id 
    and y.name = y2.name
    and ((y2.startfield > y.startfield and y2.endfield < y.endfield)
         or
         (y.startfield > y2.startfield and y.endfield < y2.endfield)))