Форум: "Базы";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизПолучить порядковый номер Найти похожие ветки
← →
veb (2006-04-08 18:29) [0]Здравствуйте.
Подскажите, как получить первый пропущенный номер в списке номеров, если отстутствует то следующий после максимального? (1,2,3,4,8,9 ответ 5) или (1,2,3,4 ответ 5) или (4,5,6,7 ответ 1) . Когда-то видел здесь классический sql-пример, но не запомнил
← →
Anatoly Podgoretsky © (2006-04-08 19:37) [1]Перебор
А зачем?
← →
veb (2006-04-08 19:52) [2]Странный вопрос.
Есть база дисков, каждый диск имеет номер. При добавлении нового диска программа, должна подсказать пользователю свободный порядковый номер.
← →
Desdechado © (2006-04-08 21:13) [3]а почему свободный должен быть первым пропущенным?
бери следующий за максимальным, он тоже свободный
← →
veb (2006-04-08 23:34) [4]потому что, такая логика заполнения базы.
← →
Anatoly Podgoretsky © (2006-04-08 23:38) [5]Значит надо срочно задуматься об дизайне.
← →
Serg1981 © (2006-04-09 19:41) [6]А когда порядковый номер достигнет например типа Integer, то как к нему добавить единицу ? Нужно искать "пробелы" в базе.
← →
Anatoly Podgoretsky © (2006-04-09 20:03) [7]Serg1981 © (09.04.06 19:41) [6]
Ты надеешься этот день увидеть?
← →
Anatoly Podgoretsky © (2006-04-09 20:03) [8]Serg1981 © (09.04.06 19:41) [6]
И почему ты подумал про Integer?
← →
Desdechado © (2006-04-09 20:06) [9]для Оракла можно так, но это (имхо) через задний проход
SELECT rownum FROM Dba_Objects
MINUS
SELECT line_id FROM Alpha
← →
veb (2006-04-09 21:18) [10]Сразу хочу сказать что номер диска, это вовсе не ID в таблице, поэтому я думаю не стоит вести спор о том закончится ли диапазон Id номеров в этом веке или загнутся реляционные БД.
Господа специалисты в БД, неужели никто не помнит класический пример SELECT запроса, не зависящий от СУБД или адаптированый под MSSQL?
Здесь на форуме два-три месяца назад была такая тема и там предложили штук шесть вариантов. Пожалуйста, помогите еще раз.
← →
Serg1981 © (2006-04-09 21:39) [11]
> Ты надеешься этот день увидеть?
А если база интенсивно обновляется милионами записей в день ?
← →
veb (2006-04-09 21:45) [12]to Serg1981
Прошу перенести свой вопрос в другую тему!
Господа специалисты в БД, неужели никто не помнит класический пример SELECT запроса, не зависящий от СУБД или адаптированый под MSSQL?
Здесь на форуме два-три месяца назад была такая тема и там предложили штук шесть вариантов. Пожалуйста, помогите еще раз.
← →
Serg1981 © (2006-04-09 21:47) [13]Мой вопрос и сводится к тому, чтобы искать "пробелы" в порядковых номерах, а не добавлять единицу к последнему.
← →
Serg1981 © (2006-04-09 21:49) [14]а на http://www.delphikingdom.ru/ не пробовал обращаться ?
← →
Nikolay M. © (2006-04-09 22:28) [15]Тупое решение: пронумеровать строки в НД запроса SELECT Number FROM table ORDER BY Number любым методом из ФАК-а
http://www.sql.ru/faq/faq_topic.aspx?fid=126
и выбрать минимальный номер №строки такой, что №строки <> Number с двумя проверками его на NOT NULL.
Правильный запрос писать лень.
← →
veb (2006-04-09 23:30) [16]to Nikolay
это жутко криво!
было очень красиво! смысл такой:
- пересечь таблицу саму с собой по left join и по какому-то условию и выбрать, кажись, несовпадающие номера.
- взять то ли минимум, то ли максимум
← →
ЮЮ © (2006-04-10 02:58) [17]Ты же сам ответил в [16]
SELECT t1.Num + 1
FROM
table t1
LEFT JOIN table t2 ON t1.Num + 1 = t2.Num
WHERE (t2.Num IS NULL)
правда он даст только ответы:
(1,2,3,4,8,9 ответ 5)
(1,2,3,4 ответ 5)
Для контроля ситуации
(4,5,6,7 ответ 1)
достаточно анализировать
SELECT MIN(Num) FROM Table
← →
sniknik © (2006-04-10 08:49) [18]и на сколько времени ты расчитываеш для добавления/подсказки одной записи, при каком размере таблици? т.е. тебя не пугает скажем минутная задержка перед "подсказкой пользователю свободного порядкового номера", при миллионе записей в таблице к примеру?
даже если записей будет не пример меньше, все одно надо чтото менять в консерватории. база у тебя однопользовательская? двух одновременно вводящих юзеров не будет гарантировано? пересечений номеров не боишся?
← →
veb (2006-04-10 09:06) [19]to sniknik
База у меня однопользовательская! Посмотреть ее можно здесь
http://crimeasoft.narod.ru/Download/VideoCat.exe
(такая ненавязчивая реклама, в целях, что может кто-что хорошее подскажет)
Количество записей в таблице "диски" вряд-ли превысит 1000. Поэтому огромное спасибо ЮЮ и всем кто уже не раз подал дельный совет.
← →
Ega23 © (2006-04-10 09:25) [20]Используй GUID и не парь мозги.
← →
stone © (2006-04-10 09:38) [21]Как вариант, повесить на таблицу триггер, который будет писать удаленные ID в отдельную таблицу, а при использовании его повторно, соответственно удалять из этой таблицы.
← →
stud © (2006-04-10 13:07) [22]ну вот на вскидку примерно, только на кой это действительно нужно?
select k1.id+1 from krp_rasp_shablon as k1
where not exists (select k2.id from krp_rasp_shablon as k2 where k2.id=k1.id+1)
← →
Ega23 © (2006-04-10 13:09) [23]А если в таблице ещё ничего нет?
← →
stud © (2006-04-10 13:16) [24]так на нет и суда нет))) ничего и не получим, равносильно отсутствию пропущенных номеров
← →
Ega23 © (2006-04-10 13:23) [25]Это я к тому, что IsNull нехило бы добавить...
← →
stud © (2006-04-10 13:30) [26]Ega23 © (10.04.06 13:23) [25]
Это я к тому, что IsNull нехило бы добавить...
проверил на пустой таблице - ниче не получил. а вообще проверки всякие это кому надо, так сказать. сама идея не очень хорошая, так чего напрягаться?
← →
Johnmen © (2006-04-11 09:32) [27]Вот этот пример
SELECT T1.ID+1, MIN(T2.ID)-1, MIN(T2.ID)-T1.ID-1
FROM TABLE T1
JOIN TABLE T2 ON T1.ID<T2.ID
GROUP BY T1.ID
HAVING MIN(T2.ID)-T1.ID>1
Получаем промежутки пропущенных ID.
В первой колонке будет начальный ID промежутка, во второй конечный.
В третьей количество пропущенных ID в промежутке.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c