查找表中属于最小和最大范围的行

时间:2010-08-17 09:57:00

标签: sql sql-server-2005 tsql

以下是此表的表格和脚本。

DECLARE @temp TABLE (PPId INT, SVPId INT, Minimum INT, Maximum INT)

INSERT INTO @temp VALUES(1,1,8,20)
INSERT INTO @temp VALUES(2,1,21,100)

alt text

最低&最大值作为参数传入。我想找到属于给定范围的所有行。

E.g;

  • 如果@minimum = 9且@maximum = 15 然后它落在第一个范围内 行。
  • 如果@minimum = 21且@maximum = 22 然后它落在第二个范围内 行。
  • 如果@minimum = 7且@maximum = 25 然后它落在两者的范围内 行,因此应该返回两行。

感谢。

4 个答案:

答案 0 :(得分:3)

比较这样的范围时,更容易查找范围不重叠的情况。两个范围有许多不同的方式可以重叠,但只有两种方式不重叠:

select *
from @temp
where not (@maximum < Minimum or @minimum > Maximum)

答案 1 :(得分:2)

SELECT  *
FROM    @temp
WHERE   minimum <= @max
        AND maximum >= @min

答案 2 :(得分:0)

我建议的答案很简单,我怀疑我错过了什么或问题不完整?

SELECT *
FROM @temp
WHERE Minimum < @Minimum
    AND Maximum > @Maximum

答案 3 :(得分:0)

我可以看到你正在尝试做什么。您想知道有多少最小/最大范围与提供的最小/最大范围重叠。试试这个:

SELECT * FROM @temp T
WHERE  @minimum  BETWEEN T.minimum AND T.maximum
OR     @maximum  BETWEEN T.minimum AND T.maximum
OR     T.minimum BETWEEN @minimum  AND @maximum
OR     T.maximum BETWEEN @minimum  AND @maximum

这应该返回与间隔[@minimum,@ max]相交的所有行。