![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сделать выборку пропущенных номеров из БД на SQL [D5]
Radix © (2006-01-26 08:36:00)В общем имеется таблица, где в одном из полей (num) хранится последовательность чисел (неких номеров) 1,2,3,4,6,7,10,11,... Среди них могут быть пропущенные (как в примере). Можно ли на sql (Firebird) сделать выборку пропущенных номеров (по примеру - 5,8,9...) ???
Johnmen (2006-01-26 10:52: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 в промежутке.
Digitman (2006-01-26 10:32:00) [2]create procedure MissingNumbers
returns (ANumber INTEGER)
AS
declare variable TempNumber INTEGER;
begin
ANumber = 0;
for
select NumField
from SomeTable
order by NumField
into :TempNumber
do begin
ANumber = ANumber + 1;
while (ANumber < TempNumber) do
begin
suspend;
ANumber = ANumber + 1;
end;
end;
end;
..
SELECT * FROM MissingNumbers
Radix (2006-01-26 08:44:00) [3]Спасибо ЮЮ! Сейчас попробую!
ЮЮ (2006-01-26 08:42:00) [4]Если устроит 5, 8 (без 9), то
SELET t0.ID + 1 FROM
table t0
LEFT JOIN t1 ON (t0.ID + 1) = t1.Id
WHERE t1.ID IS NULL