powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выявить дыры в заданом диапазоне чисел
9 сообщений из 9, страница 1 из 1
Как выявить дыры в заданом диапазоне чисел
    #39608424
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тобиш задача следующая :
1) я указываю диапазон чисел для проверки на наличие "дыр" в колонке
2) мне нужно выявить все дыры и записать значение:
а) с которого начались пробелы
б) число на котором закончились
в) количество пропущенных
и так по всем дырам в заданом диапазоне
колонка много милионная

select
t1.f1,
min(t2.f1) as mins,
min(t2.f1)-t1.f1-1 as counts
from #temp1 t1, #temp1 t2
where t2.f1>t1.f1
group by t1.f1
having t1.f1+1< min(t2.f1)

Этот запрос решает проблему но тормозит на больших обьемах информации (сравнить за раз надо 10-20 млн строк)
Может у когото есть другое решение, буду рад за подсказку :)
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608430
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady,

500 тысяч мульенов раз здесь на форуме это обсуждалось
https://www.google.ru/search?hl=en&q=gaps and island t-sql&gws_rd=cr,ssl&dcr=0&ei=RHyWWq6iOIWRsgHZ_q34Bw
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608437
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady,

составьте нумерованный многомиллионный список и найдите разницу двух наборов.
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608449
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,
Тобиш вы имеете ввиду создать аналогичную таблицу с таким же диапазоном чисел (только без пропусков) и сравнить с оригиналом?
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608458
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady, страсти то какие...

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table #temp (id int);

insert into #temp  (id)
values  (1), (2), (4), (8);

select prev_id + 1 as gap_start, t.id - 1 as gap_end, t.id - t.prev_id - 1 as gap_count
from    (select id, lag(id) over (order by id) as prev_id
         from   #temp) as t
where t.id - t.prev_id > 1;
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608463
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto,

спасибо вроде то что нужно :)
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608468
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady, справедливости ради это не лучший вариант, посмотрите здесь сравнение по производительности (из ссылки, которую вам выше дали, нашел):

https://blog.waynesheffield.com/wayne/archive/2012/04/sql-server-2012-performance-test-gap-detection/
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608571
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady,

да, генерация такой таблицы не займет много времени, а сравнение будет происходить очень быстро. Особенно полезна такая таблица при регулярном поиске. То же самое касается и календаря.
...
Рейтинг: 0 / 0
Как выявить дыры в заданом диапазоне чисел
    #39608580
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо!

Ответ Minamoto, для моей конкретной ситуации целиком устраивает
Тему можно считать закрытой.
:)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выявить дыры в заданом диапазоне чисел
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]