Найти строки в таблице, которые попадают под минимальный и максимальный диапазон - PullRequest
1 голос
/ 17 августа 2010

Ниже приведены таблица и сценарий этой таблицы.

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

Минимум и максимум передаются в качестве параметра.Я хочу найти все строки, попадающие в данный диапазон.

Например;

  • Если @minimum = 9 и @maximum = 15, то он попадает в диапазон первой строки.
  • Если @minimum = 21 и @maximum = 22, то он попадает в диапазон 2-й строки.
  • Если @minimum = 7 и @maximum = 25, тогда он попадает в диапазон обоихстроки, поэтому обе строки должны быть возвращены.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 17 августа 2010

При сравнении таких диапазонов легче искать случай, когда диапазоны не перекрываются.Существует много разных способов перекрытия двух диапазонов, но есть только два, которые не перекрываются:

select *
from @temp
where not (@maximum < Minimum or @minimum > Maximum)
2 голосов
/ 17 августа 2010
SELECT  *
FROM    @temp
WHERE   minimum <= @max
        AND maximum >= @min
0 голосов
/ 17 августа 2010

Я вижу, что вы пытаетесь сделать.Вы хотите знать, сколько диапазонов min / max перекрываются с диапазоном обеспечения min / max.Попробуйте это:

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].

0 голосов
/ 17 августа 2010

Мой предложенный ответ настолько прост, что я подозреваю, что я что-то упустил или вопрос не полный?

SELECT *
FROM @temp
WHERE Minimum < @Minimum
    AND Maximum > @Maximum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...