Hallo Ilja,
erwähnen sollte man eventuell auch, dass wenn es keine datensätze in der ergebnismenge gibt, dass dann der kleinste freie wert die unter grenze ist.
das ist der eine Sonderfall: noch gar keine Datensätze im Intervall vorhanden.
Es gibt noch einen zweiten Sonderfall: keine freie Zahl im Intervall vorhanden.
Wäre es nicht übersichtlicher, dies mit CASE zu lösen? Etwa in der Art:
SELECT
CASE
-- Intervall ist noch ganz frei
WHEN (SELECT
COUNT(DISTINCT spalte)
FROM
tabelle
WHERE
spalte BETWEEN <anfang> AND <ende>) = 0 THEN <anfang>
-- Intervall komplett belegt
WHEN (SELECT
COUNT(DISTINCT spalte)
FROM
tabelle
WHERE
spalte BETWEEN <anfang> AND <ende>) = (1 + <ende> - <anfang>) THEN NULL
-- sonst Dein Vorschlag
ELSE
....
END
Die Filterung auf reine Zahlenwerte hab' ich wie Du vorhin ausgelassen. Für den Fall, dass kein Wert frei ist, gäbe ich NULL zurück - und baute aus dem ganzen gleich eine gespeicherte Funktion, die einen skalaren Wert zurückgibt :-)
Freundliche Grüße
Vinzenz