У меня есть достаточно большой набор телефонных номеров (около 2 миллионов) в таблице базы данных. Эти числа были вставлены в блоки, поэтому существует множество непрерывных диапазонов чисел, от 10 до 10 тысяч в диапазоне. Некоторые из этих чисел используются и поэтому помечены как недоступные, остальные доступны. Учитывая определенный номер, мне нужен способ найти непрерывные диапазоны чисел, как выше, так и ниже этого числа. Диапазон должен продолжаться до тех пор, пока он не найдет недоступный номер или встретит границу двух диапазонов.Поиск непрерывных диапазонов в наборе чисел
В приведенном примере следующий набор:
1000
1001
1002
1010
1011
1012
1013
1020
1021
1022
Выполнение поиска с использованием 1012 в качестве параметра должен возвращать 1010, 1011, 1012, 1013.
Что такое хороший способ формирования запроса к найти эти диапазоны? Мы используем NHibernate поверх SQL-сервера, решение с использованием либо отлично.
Продумывал эти строки где-то, но не видел. +1 – Unreason
Это умно, но не полностью отвечает на вопрос. Если одна из строк удаляется, идентификаторы не пересчитываются, поэтому у вас есть непрерывный набор с одинаковым разным для всех значений. Однако я могу использовать сгенерированный номер строки в качестве части запроса для ускорения работы. –
Да, вы можете использовать функцию ROW_NUMBER() над столбцом ID, чтобы генерировать непрерывную последовательность для вычисления diff. http://msdn.microsoft.com/en-us/library/ms186734.aspx –