Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить порядковый номер [D7, MSSQL]


Страницы:   1 2

veb ©   (2006-04-08 18:29:00) 

Здравствуйте.
Подскажите, как получить первый пропущенный номер в списке номеров, если отстутствует то следующий после максимального? (1,2,3,4,8,9 ответ 5) или (1,2,3,4 ответ 5) или (4,5,6,7 ответ 1) . Когда-то видел здесь классический sql-пример, но не запомнил


Johnmen   (2006-04-11 09:32:00) [1]

Вот этот пример
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 в промежутке.


stud   (2006-04-10 13:30:00) [2]

Ega23 ©   (10.04.06 13:23) [25]
Это я к тому, что IsNull нехило бы добавить...

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


Ega23   (2006-04-10 13:23:00) [3]

Это я к тому, что IsNull нехило бы добавить...


stud   (2006-04-10 13:16:00) [4]

так на нет и суда нет))) ничего и не получим, равносильно отсутствию пропущенных номеров


Ega23   (2006-04-10 13:09:00) [5]

А если в таблице ещё ничего нет?


stud   (2006-04-10 13:07:00) [6]

ну вот на вскидку примерно, только на кой это действительно нужно?
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)


stone   (2006-04-10 09:38:00) [7]

Как вариант, повесить на таблицу триггер, который будет писать удаленные ID в отдельную таблицу, а при использовании его повторно, соответственно удалять из этой таблицы.


Ega23   (2006-04-10 09:25:00) [8]

Используй GUID и не парь мозги.


veb   (2006-04-10 09:06:00) [9]

to sniknik
 База у меня однопользовательская! Посмотреть ее можно здесь
http://crimeasoft.narod.ru/Download/VideoCat.exe
(такая ненавязчивая реклама, в целях, что может кто-что хорошее подскажет)
Количество записей в таблице "диски" вряд-ли превысит 1000. Поэтому огромное спасибо ЮЮ и всем кто уже не раз подал дельный совет.


sniknik   (2006-04-10 08:49:00) [10]

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

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


ЮЮ   (2006-04-10 02:58:00) [11]

Ты же сам ответил в [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


veb   (2006-04-09 23:30:00) [12]

to Nikolay
 это жутко криво!
 было очень красиво! смысл такой:
- пересечь таблицу саму с собой по left join и по какому-то условию и выбрать, кажись, несовпадающие номера.
- взять то ли минимум, то ли максимум


Nikolay M.   (2006-04-09 22:28:00) [13]

Тупое решение: пронумеровать строки в НД запроса SELECT Number FROM table ORDER BY Number любым методом из ФАК-а

http://www.sql.ru/faq/faq_topic.aspx?fid=126

и выбрать минимальный номер №строки такой, что №строки <> Number с двумя проверками его на NOT NULL.
Правильный запрос писать лень.


Serg1981   (2006-04-09 21:49:00) [14]

а на http://www.delphikingdom.ru/не пробовал обращаться ?


Serg1981   (2006-04-09 21:47:00) [15]

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


veb   (2006-04-09 21:45:00) [16]

to Serg1981
Прошу перенести свой вопрос в другую тему!


Господа специалисты в БД, неужели никто не помнит класический пример SELECT запроса, не зависящий от СУБД или адаптированый под MSSQL?

Здесь на форуме два-три месяца назад была такая тема и там предложили штук шесть вариантов. Пожалуйста, помогите еще раз.


Serg1981   (2006-04-09 21:39:00) [17]


> Ты надеешься этот день увидеть?

А если база интенсивно обновляется милионами записей в день ?


veb   (2006-04-09 21:18:00) [18]

Сразу хочу сказать что номер диска, это вовсе не ID в таблице, поэтому я думаю не стоит вести спор о том закончится ли диапазон Id номеров в этом веке или загнутся реляционные БД.

Господа специалисты в БД, неужели никто не помнит класический пример SELECT запроса, не зависящий от СУБД или адаптированый под MSSQL?

Здесь на форуме два-три месяца назад была такая тема и там предложили штук шесть вариантов. Пожалуйста, помогите еще раз.


Desdechado   (2006-04-09 20:06:00) [19]

для Оракла можно так, но это (имхо) через задний проход
SELECT rownum FROM Dba_Objects
MINUS
SELECT line_id FROM Alpha


Anatoly Podgoretsky   (2006-04-09 20:03:00) [20]

Serg1981 ©   (09.04.06 19:41) [6]
И почему ты подумал про Integer?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо