Na brzinu, problem moze da se resi ovako:
Code:
-- Ovo ti da SVE nedostajuce brojeve:
SELECT B.broj
FROM Brojevi AS B
LEFT JOIN Uzorak AS U ON U.broj_u_danu = B.broj
;
-- onda izaberes najmanji od njih:
SELECT MIN(broj)
FROM
(
SELECT B.broj
FROM Brojevi AS B
LEFT JOIN Uzorak AS U ON U.broj_u_danu = B.broj
) AS X
;
Umesto tabele Brojevi mozes da koristis onaj elegantni izraz sto ti je dao Vujkev, samo promenis MAXRECURSION i ono rn<500, podesis kako tebi treba.
Diskusija ponudjenog resenja:
Ako je tabela Brojevi velika, recimo deset miliona brojeva, ond ce prvi kveri (LEFT JOIN) da vrati sve brojeve koji su u tabeli Brojevi, znaci i one vece od najveceg u tabeli Uzorak. Za 500 brojeva nema veze, ali za vise moze biti problem. Jos veci je problem sto se moze desiti da nemas ni jedna 'propusteni broj' u tabeli uzorci, a da ponudjeni kveri ipak vrati nesto - sve borjeve vece od najvece vrednosti U.broj_u_danu. Kveri koji nema ove nedostatke izgledao bi ovako:
Code:
SELECT MIN(broj)
FROM
(
SELECT B.broj
FROM Brojevi AS B
LEFT JOIN Uzorak AS U ON U.broj_u_danu = B.broj
WHERE B.broj <= (SELECT MAX(broj_u_danu) FROM Uzorak)
) AS X
;
Tako nekako otprilike. Verujem da ces se snaci za dalje.
Srecn rad