需要查找sql​​中是否存在重叠

时间:2017-04-28 13:39:41

标签: sql-server-2008

我在很长一段时间内遇到了问题并试图找出如何使用sql解决这个问题。

我有一个有3列的表:

LowerLimit UpperLimit Code
1              10       A
10.01           20      B
20.01           40      C
40.01           100     D

所以在这种情况下,我需要检查是否存在重叠。 Upperlimit不应与下一行的LowerLimit匹配,允许的差异仅为0.01。是否有可能使用查询来解决这个问题,或者我是否需要迭代整个范围并找出是否没有重叠???

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用exists执行此操作以获取第一行重叠。根据您的具体逻辑:

select t.*
from t
where exists (select 1
              from t t2
              where t2.upperlimit >= t.lowerlimit and
                    t2.upperlimit < t.upperlimit + 0.01
             );

如果您想要两个行,可以将其表示为join或使用第二个exists来获取前一行。

我不喜欢你的数据表示。我会简单地使下限包含和上限独占。然后下一个下限可能只是前一个上限。你将无法使用between,但对于带小数部分的数字,这是一个坏主意。