Ako BrZaduzenja pripada skupu prirodnih brojeva, onda:
Code:
SELECT COALESCE(MIN(t.neiskoriscen_BrZaduzenja),
(SELECT MAX(BrZaduzenja) + 1 FROM neka_tabela)
) AS najmanji_slobodan_BrZaduzenja
FROM (SELECT COUNT(t2.BrZaduzenja) AS neiskoriscen_BrZaduzenja
FROM neka_tabela AS t1
INNER JOIN
neka_tabela AS t2
ON t1.BrZaduzenja >= t2.BrZaduzenja
GROUP BY t1.BrZaduzenja
HAVING t1.BrZaduzenja <> COUNT(t2.BrZaduzenja)
) AS t
Gornji upit ne samo da vraca prvu rupu nego u slucaju da nema rupe vraca prvi sledeci broj. Ako je potrebno samo nalazenje rupe onda je dovoljno i:
Code:
SELECT MIN(t.neiskoriscen_BrZaduzenja) AS najmanji_neiskoriscen_BrZaduzenja
FROM (SELECT COUNT(t2.BrZaduzenja) AS neiskoriscen_BrZaduzenja
FROM neka_tabela AS t1
INNER JOIN
neka_tabela AS t2
ON t1.BrZaduzenja >= t2.BrZaduzenja
GROUP BY t1.BrZaduzenja
HAVING t1.BrZaduzenja <> COUNT(t2.BrZaduzenja)
) AS t
[Ovu poruku je menjao chachka dana 15.05.2007. u 10:17 GMT+1]
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming." - Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo