我在很长一段时间内遇到了问题并试图找出如何使用sql解决这个问题。
我有一个有3列的表:
LowerLimit UpperLimit Code
1 10 A
10.01 20 B
20.01 40 C
40.01 100 D
所以在这种情况下,我需要检查是否存在重叠。 Upperlimit不应与下一行的LowerLimit匹配,允许的差异仅为0.01。是否有可能使用查询来解决这个问题,或者我是否需要迭代整个范围并找出是否没有重叠???
感谢任何帮助。
答案 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
,但对于带小数部分的数字,这是一个坏主意。