代码之家  ›  专栏  ›  技术社区  ›  Kashif

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

  •  1
  • Kashif  · 技术社区  · 14 年前

    下面是该表的表和脚本。

    declare@temp table(ppid int,svpid int,minimum int,maximum int)
    
    插入@temp值(1,1,8,20)
    插入@temp值(2,1,21100)
    < /代码> 
    
    

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

    • 如果@最小值=9且@最大值=15 然后它在第一个范围内 行,
    • 如果@最小值=21且@最大值=22 然后它落在2档 行,
    • 如果@最小值=7且@最大值=25 然后它会落在两者的范围内 行,因此两行都应返回。
    谢谢。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

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

    例如。;

    • 如果@最小值=9且@最大值=15 然后它在第一个范围内 行。
    • 如果@最小值=21且@最大值=22 然后它落在2档 行。
    • 如果@最小值=7且@最大值=25 然后它会落在两者的范围内 行,因此应返回这两行。

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Guffa    14 年前

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

    select *
    from @temp
    where not (@maximum < Minimum or @minimum > Maximum)
    
        2
  •  2
  •   Quassnoi    14 年前
    SELECT  *
    FROM    @temp
    WHERE   minimum <= @max
            AND maximum >= @min
    
        3
  •  0
  •   Daniel Renshaw    14 年前

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

    SELECT *
    FROM @temp
    WHERE Minimum < @Minimum
        AND Maximum > @Maximum
    
        4
  •  0
  •   Joel Goodwin    14 年前

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

    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,@maximum]相交的所有行。