Найти доступный диапазон из таблицы в SQL Server

У меня есть таблица, которая содержит столбцы Start и End, как INT . Мне нужно найти самый первый доступный диапазон N сравнению с существующими данными.

Таблица Схема :

 CREATE TABLE [dbo].[MSRange] ( [RangeId] [int] IDENTITY(1,1) NOT NULL, [RangeStart] [int] NOT NULL, [RangeEnd] [int] NOT NULL, CONSTRAINT [PK_MSRange] PRIMARY KEY CLUSTERED ([RangeId] ASC) ) ON [PRIMARY] 

Данные пробного семени:

 INSERT INTO [dbo].[MSRange] ([RangeStart], [RangeEnd]) VALUES (1, 150), (1250, 1500), (3100, 7500), (10500, 15000); 

Требование:

Мне нужно найти заполнитель для 1000 слотов, очевидно, из данных семян можно сказать, что доступно 151-1150. Аналогично для 1500 слотов доступно 1501-3000.

Пожалуйста, помогите мне, как получить первый доступный заполнитель.

 declare @MSRange table ( [RangeId] [int] IDENTITY(1,1) NOT NULL primary key, [RangeStart] [int] NOT NULL, [RangeEnd] [int] NOT NULL ) INSERT INTO @MSRange ([RangeStart], [RangeEnd]) VALUES (1, 150), (1250, 1500), (3100, 7500), (10500, 15000); declare @N int = 1000; with cte as ( select RangeId, RangeEnd as result_range_start, isnull(lead(RangeStart) over(order by RangeId), 2147483647) as result_range_end from @MSRange ) select top 1 result_range_start + 1, result_range_start + @N from cte where result_range_end - result_range_start > @N order by RangeId; 

Этот код предназначен для версий начиная с 2012 . Для @@version <= 2008 R2 такая же идея, но используйте row_number() для присоединения, а затем текущий с предыдущим

  • DENSE_RANK () без дублирования
  • Как мне форматировать дату в TSql, когда я использую json_value
  • Как добавить столбец суммирования условной суммы в SQL-запрос, который зависит от предыдущих строк?
  • Функция DATEDIFF привела к переполнению в SQL Server 2016
  • Несколько предикатов безопасности (FILTER | BLOCK) на одной таблице
  • SQL Server 2016 выберите, где в json-массиве
  • Найти возвращение в футбольной базе данных с помощью запроса Sql
  • Пустая строка приводит к «Ошибки были обнаружены в аргументах командной строки, убедитесь, что все аргументы установлены правильно»
  • Не поддерживается мобильная отчетность SSRS
  • SQL не будет подключаться после развертывания
  • SSIS: преобразовать строку ISO 8601 в столбец datetime
  • Interesting Posts

    Побитовая операция с TSQL как вращение, выборочная инверсия битов

    SQL Server Script Quick Заменить все найденные строки с добавочным целым числом

    Как выбрать значение, основанное на позиции из столбца с разделителями на SQL-сервере 2012

    Как выбрать данные, где они имеют вторую разницу?

    Как передать значение типа Nullable Bit в хранимую процедуру SQL Server?

    Подсчет и присоединение таблицы SQL

    Возможно ли создать встроенную табличную функцию из этой скалярной функции?

    Количество открытых подключений и значение состояния спящего режима соединения

    ВЛЕВОЕ СОЕДИНИТЕЛЬНОЕ СОЕДИНЕНИЕ 3 стола

    Динамический результат SQL INTO Временная таблица

    Строка SQL заменяется на основании предложения WHERE

    Включение отладки хранимых процедур SQL Server с .Net Core

    Как сравнить datetimes в SQL, чтобы исключить равные даты?

    Использовать значение столбца как шаблон строки в функции REPLACE

    Динамический SQL-запрос для игнорирования нулевых значений, основанных на нулевом значении в ячейке

    Давайте будем гением компьютера.