Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.10;
Скачать: CL | DM;

Вниз

?SQL   Найти похожие ветки 

 
PrettyFly   (2002-09-18 17:45) [0]

Есть такая задача:
Дана таблица с integerами (>0), нужно
найти минимальный integer >0, который
не встречается в этой таблице...
(всё это в InterBase 5)

CREATE PROCEDURE GetMinNumber
RETURNS (MinNumber INTEGER)
AS
BEGIN
MinNumber = 1;
WHILE (MinNumber IN (SELECT Number FROM OurTable))
DO MinNumber = MinNumber + 1;
END


почему такая процедурка выдаёт ошибку
"subselect illegal in this context"
и как тогда лучше сделать?


 
Андрей Прокофьев   (2002-09-18 17:55) [1]

Может, найти минимальный, который встречается и отнять 1


 
Андрей Прокофьев   (2002-09-18 17:57) [2]

Извините, невнимательно прочел и вообще не подумал :(


 
ЮЮ ©   (2002-09-19 03:21) [3]

Может лучше пробежаться по одному запросу к таблице, сравнивая Number текущей записи с PriorNumber, запомненым при просмотре предыдущей записи, и если Number-PriorNumber>1 возвращать PriorNumber+1, чем выполнять новый запрос в цикле


 
SVM   (2002-09-19 08:41) [4]

Еще вариант:

1. Найти минимальное значение поля (ID).
Если это значение >1, то искомое значение
на 1 меньше. Иначе выполнить запрос:

2. select a.ID+1 as aID,
b.id as bID from T a Left Join T b
on a.id=b.id-1 where b.ID is null order by 1

Первая строка будет содержать требуемое значение.


 
PrettyFly   (2002-09-19 13:33) [5]

Спасиба за идею...


 
Johnmen ©   (2002-09-19 15:03) [6]

Проанализировав идею SVM (19.09.02 08:41),
можно получить сразу то, что надо, так :

SELECT 1 AS Fld FROM Tbl
WHERE 1<(SELECT MIN(id) FROM Tbl)
UNION
SELECT A.id+1 AS Fld FROM Tbl A, Tbl B
WHERE (A.id=B.id+1) AND
(1=(SELECT MIN(id) FROM Tbl))



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
1-31872
yur78
2002-09-28 20:40
2002.10.10
Как программно прокрутить StringGrid


1-31806
Diman-Far
2002-10-02 09:37
2002.10.10
RichEdit select


1-31900
BIG BROTHER
2002-09-23 20:34
2002.10.10
OPEN FOLDER


4-32100
Nikolab
2002-08-28 11:38
2002.10.10
Dlia nekotorie vk_xxx TCheckBox.OnKeyDown ne vuizivaetsia


7-32024
Beginner
2002-07-31 23:03
2002.10.10
Обратится в Windows к физическому диску на низком уровне.