powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как определить отсутствующий элемент в последовательности
25 сообщений из 87, страница 1 из 4
как определить отсутствующий элемент в последовательности
    #39390849
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дана последовательность данных
'00001'
'00002'
'00004'
'00005'
'00006'
Как найти отстутсвующий элемент '00003'
Курсоры не предлагать желательно.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39390855
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abort,

lag/lead
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39390980
Артефакт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad, это не оптимально.

Оптимальное решение приводили уже. Просто и читабельно.
-2-
Код: plsql
1.
2.
3.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,4,5,6,8,9)))
select (max(n)-min(n))*(max(n)-min(n)+1)/2+(count(*)+1)*min(n)-sum(n)
from t;
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39390997
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артефакт,
уймись. может быть и 2 отсутствующих. что тогда делать будешь?)
sys.odcinumberlist(2,3,5,6,8,9)
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391008
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abortдана последовательность данных
'00001'
'00002'
'00004'
'00005'
'00006'
Как найти отстутсвующий элемент '00003'
Курсоры не предлагать желательно.
minus select..
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391015
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пропуски могут быть более 1.
LEAD оптимально но при больших данных считается долго. Но пока терпимо...
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391022
Артефакт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint, как?! а все, теперь вижу последний комментарий топикстартера.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391033
abortдана последовательность данных
'00001'
'00002'
'00004'
'00005'
'00006'
Как найти отстутсвующий элемент '00003'

А можно алгоритм, по которому определяется разрыв в последовательности символьных данных?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391036
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артефакт,
хрустальный шар всегда прав))
abort ,
а еще может отсутствовать подряд несколько значений))
сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,5,6,8,9)) order by 1)
select to_char(max(n)+1)||'-'||(lead(min(n)) over (order by n-rownum)-1),n-rownum
from t
group by n-rownum
order by n-rownum;

...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391040
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жертва abortа,

формируются файлы, автоматом они парсятся и заносятся в БД. При это присваивается сквозной номер. Но иногда обработчик дает сбой или файл(ы) не поступают. Т.е. вместо последовательности данных имена файлов с сквозным сиквенсом
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391079
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VintАртефакт,
хрустальный шар всегда прав))
abort ,
а еще может отсутствовать подряд несколько значений))
сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,5,6,8,9)) order by 1)
select to_char(max(n)+1)||'-'||(lead(min(n)) over (order by n-rownum)-1),n-rownum
from t
group by n-rownum
order by n-rownum;



Собеседование? О господи. Кого вы там собеседуете?

И чем вам SELECT LEVEL FROM DUAL CONNECT BY LEVEL < n ... не угодил?
Какие еще odcinumberlist ?

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
(
  SELECT LEVEL lvl FROM DUAL 
  CONNECT BY LEVEL < (SELECT MAX(all_objects.object_id) FROM all_objects)
)
WHERE NOT EXISTS (SELECT NULL FROM all_objects WHERE all_objects.object_id = lvl)



или даже быстрее раза в два:

Код: plsql
1.
2.
3.
  SELECT LEVEL FROM DUAL  CONNECT BY LEVEL < (SELECT MAX(all_objects.object_id) FROM all_objects)
  MINUS
  SELECT all_objects.object_id FROM all_objects 
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391090
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
иди учись читать. особенно полезно с третьего поста откуда и был взят odcinumberlist. придраться больше не к чему? или есть что по основной задаче автора сказать? ты бы точно не прошёл))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391102
Артефакт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint, dbpatch

это все я виноват. Попытался неудачно пошутить в серьезной теме и внес смуту в общение. Удаляю свой серый ник. Еще раз простите!
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391104
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
иди учись читать. особенно полезно с третьего поста откуда и был взят odcinumberlist. придраться больше не к чему? или есть что по основной задаче автора сказать? ты бы точно не прошёл))

я придрался к твоей ультрапафосной фразе:

"сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его "


выяснить, с какого перепугу ты его хочешь видеть только его - прямо экзестенциальная научная проблема теперь.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391117
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
Код: plsql
1.
2.
3.
4.
5.
WITH t(n)
 (SELECT 100000000000000000 a
    FROM dual
  UNION ALL
  SELECT 100000000000000002 FROM dual)


вот тебе тестовые данные. жду твоих тестов по времени выполнения, не надорвись там...
потом может быть снизойду до убого и поясню почему жду именно такого решения, раз уж кто-то не смог за год найти кнопку поиска
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391128
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
Код: plsql
1.
2.
3.
4.
5.
WITH t(n)
 (SELECT 100000000000000000 a
    FROM dual
  UNION ALL
  SELECT 100000000000000002 FROM dual)


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

да да, ты главное жди :)

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

ты что сказать-то хотел? что на CONNECT BY temp/pga расходуется? и? у него в задаче пять разрядов в цифрах, потребность в памяти можешь сам посчитать, на калькуляторе, собеседователь.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391143
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
это ты притянул за уши all_objects, и это ты начал про "даже быстрее раза в два", а теперь вдруг слился и не хочешь считать количество лапши на своих ушах))) и как "вчерашний студент"(для меня это комплимент если что) могу посоветовать быть более предметным и последовательным)) а не прыгать с темы на тему. твои решения сто раз обсасывались на этом форуме)) еще лет 12 назад. если мне не изменяет моя студенческая память и дата регистрации)))
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391155
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintсто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно егоПозориться с ROWNUM аж сто раз не стоило.

dbpatchвсе сейчас возьмут и бросятся считать дыры на пространствах галактического масштабаИди патчь БД. Разработка это не твоё.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391171
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
лично твое мнение? или опять холиварить будем?)
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391198
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicdbpatchвсе сейчас возьмут и бросятся считать дыры на пространствах галактического масштабаИди патчь БД. Разработка это не твоё.

Я конечно извиняюсь, но у тебя разве кто-то спрашивал, кому что сейчас и вообще нужно делать?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391206
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchЯ конечно извиняюсь, но у тебя разве кто-то спрашивал, кому что сейчас и вообще нужно делать?Troll detected.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391216
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На хабре была похожая статья
https://habrahabr.ru/post/303364/
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391221
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintdbpatch,
это ты притянул за уши all_objects, и это ты начал про "даже быстрее раза в два",
all_objects это обычная практика для примеров, ибо он есть у всех, что тебя так перевозбудило?

Vintа теперь вдруг слился и не хочешь считать количество лапши на своих ушах)))
С чего бы я слился? Это ты в лужу сел, не понимая суть задачи.

Заполнение дыр актуально на человеко-читаемых данных, т.е. когда у тебя до 6 разрядов (до шести цифр), и там connect by
работает очень хорошо.

Когда у тебя диапазон за миллион - то там никакой нужды заполнять дыры ни в одной практической задаче нет, там работают просто сиквенсы и дыры никого не напрягают. Ибо это 100% не статические справочники, а бизнес-факты.
И даже если очень припечет (к примеру искать номера пропущенных номеров телефонов у операторов или кредитных карт у банков) - никто не мешает поработать диапазонами по 100к в цикле.

Ты мне сунул под нос свою фантазию, я тебе прямо сказал - эта твоя выдуманная "задача" - это пускание пузырей сидя из лужи, и не смешно и не актуально. Зачем ты это сделал и что хотел доказать - загадка.

Vintи как "вчерашний студент"(для меня это комплимент если что) могу посоветовать быть более предметным и последовательным)) а не прыгать с темы на тему. твои решения сто раз обсасывались на этом форуме)) еще лет 12 назад. если мне не изменяет моя студенческая память и дата регистрации)))

мои решения? дата регистрации? сюр какой-то.

ну пытаешься ты сохранить лицо, это понятно, но я то тут причем?
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391254
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchVintАртефакт,
хрустальный шар всегда прав))
abort ,
а еще может отсутствовать подряд несколько значений))
сто раз светилось это решение и на собеседования я обычно спрашиваю и хочу увидеть именно его
Код: plsql
1.
2.
3.
4.
5.
with t(n) as (select column_value from table(sys.odcinumberlist(2,3,5,6,8,9)) order by 1)
select to_char(max(n)+1)||'-'||(lead(min(n)) over (order by n-rownum)-1),n-rownum
from t
group by n-rownum
order by n-rownum;



Собеседование? О господи. Кого вы там собеседуете?

И чем вам SELECT LEVEL FROM DUAL CONNECT BY LEVEL < n ... не угодил?
Какие еще odcinumberlist ?

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
(
  SELECT LEVEL lvl FROM DUAL 
  CONNECT BY LEVEL < (SELECT MAX(all_objects.object_id) FROM all_objects)
)
WHERE NOT EXISTS (SELECT NULL FROM all_objects WHERE all_objects.object_id = lvl)



или даже быстрее раза в два:

Код: plsql
1.
2.
3.
  SELECT LEVEL FROM DUAL  CONNECT BY LEVEL < (SELECT MAX(all_objects.object_id) FROM all_objects)
  MINUS
  SELECT all_objects.object_id FROM all_objects 

Итак, в первом примере два полных сканирования, ANTI JOIN, и connect by.
Во втором два полных сканирования, connect by и сортировка, требуемая для минус.

В примере Винта одно сканирование и сортировка, требуемая для аналитики (если дырки ищутся в PK например, то сортировка вообще не потребуется, т.к. данные могут быть уже вычитаны упорядочено).

Ты утверждаешь что твое решение имеет какие-то преимущества?
Свой connect by ты можешь чуть улучшить генерируя от min до max а не от 1 до max, но все равно его сюда приплетать и генерировать весь диапазон тот еще идиотизм.
...
Рейтинг: 0 / 0
как определить отсутствующий элемент в последовательности
    #39391338
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopТы утверждаешь что твое решение имеет какие-то преимущества?
Преимущества перед чем, прости? table(sys.odcinumberlist(2,3,5,6,8,9)) это не решение задачи в общем случае, это вообще не решение.

dbms_photoshopСвой connect by ты можешь чуть улучшить генерируя от min до max а не от 1 до max, но все равно его сюда приплетать и генерировать весь диапазон тот еще идиотизм.

Да ты что? Ну приведи пример своего ээээ.... неидиотизма, и мы тут сейчас выскажем свое оценочное суждение :)
А то кричать лишь "гляди, повели идиота" - любой идиот сможет.

А по поводу того, что можно и (нужно порой_ генерировать и проверять произвольные диапазоны от N до M я говорил выше в фразе про "100к в цикле", и? Кому надо, тот и сам догадается.
...
Рейтинг: 0 / 0
25 сообщений из 87, страница 1 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как определить отсутствующий элемент в последовательности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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