Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

?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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
6-31930
MAYOR
2002-08-02 20:15
2002.10.10
Как обработать ошибку соединения


1-31892
First_May
2002-09-27 15:26
2002.10.10
Форма ...


1-31676
XED
2002-09-30 13:45
2002.10.10
Вопрос мастерам!!!


1-31689
Ago
2002-09-30 15:00
2002.10.10
ComboBox с иконками (рядом с выбираемыми значениями)


4-32095
PaRL
2002-08-27 19:58
2002.10.10
Текст





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский