Intereting Posts
Таблица J-таблицы T-SQL на основе самой близкой даты Объедините два разных несвязанных SQL-запроса (возвращающих результаты одного столбца) в один результат запроса с двумя столбцами Временное отключить внешние ключи? Создавать новую таблицу базы данных каждый год Ошибка SQL Turkish_CI_AS и SQL_Latin1_General_CP1_CI_AS Автоматическое увеличение после удаления в MySQL Преобразование нескольких строк в одну строку с несколькими столбцами SQL с несколькими LIKE с одной переменной Oracle Trigger ORA-04098: триггер недействителен и не прошел повторную проверку Что было бы надежным способом получить дробное значение из числа? Неправильный синтаксис около ',' MyBatis не возвращает все результаты запроса Что такое синтаксис MS Access SQL для создания поля типа Hyperlink? Datecolumn: Невозможно передать объект типа «System.DateTime» для ввода «System.String» Система рейтинга MySQL – Найти рейтинг

sql – запрос между двумя строками

Возник вопрос. Я делаю выбор, где мне нужно захватить 2 строки. Я имею значение 13000.00000. Мне нужно захватить обе строки 2 и 3, так как она падает между 10000 (мин. Диапазон) и 15000 (мин. Диапазон)

Это утверждение просто тянет в строке 2.

select * from TABLE1 where 13000 between TABLE1.MIN_RANGE and TABLE1.MAX_RANGE; 

ТАБЛИЦА 1

 Row min_range max_range return_value 1 0.00000 9999.99900 1.15 2 10000.00000 14999.99900 1.25 3 15000.00000 19999.99900 1.35 4 20000.00000 24999.99900 1.14 

Вы хотите получить первую строку, которая падает ниже ввода, и первая строка, которая падает выше ввода, используя MIN_RANGE в качестве дескриптора:

 select top 1 * from TABLE1 where TABLE1.MIN_RANGE < @input order by MIN_RANGE desc UNION select top 1 * from TABLE1 where TABLE1.MIN_RANGE >= @input order by MIN_RANGE; 

Это похоже на решение для оконной функции, которую, возможно, кто-то может опубликовать.

Ваш выход правильный, 13000 не попадает в диапазон строки 3.

Для вас должен работать следующий SQL-запрос:

 DECLARE @TestRange NUMERIC(18,0) SET @TestRange = 13000 SELECT *, (max_range - min_range) FROM TABLE1 WHERE ((@TestRange >= min_range AND @TestRange <= max_range) OR ((@TestRange >= min_range - (max_range - min_range) AND @TestRange <= max_range))) ORDER BY min_range 

Протестировано с Microsoft SQL Server. Измените 13000 на любое значение, необходимое для тестирования, или не стесняйтесь кодировать значение