[ captPicard @ 14.10.2010. 07:59 ] @
| Ovaj query vraća prvi broj u nizu koji nedostaje
Code: select (a.broj + 1)
from tablica a
where not exists
(select 1
from tablica b
where b.broj = (a.broj + 1))
order by 1
Ako je niz npr.
Code: 1, 2, 4, 5, 6
rezultat će biti 3. Međutim, ako je niz
Code: 2, 3, 5, 6, 7
rezultat će vratiti 4 a ne 1 koji je ustvari prvi broj koji nedostaje u nizu.
Ima li netko rješenje?
Hvala! |
[ Zoran.Eremija @ 14.10.2010. 09:11 ] @
TabelaA
BrojA
1
2
3
4
5
6
7
8
9
10
TabelaB
BrojB
2
3
5
6
7
Brojevi koji nedostaju
SELECT TabelaA.BrojA
FROM TabelaA LEFT JOIN TabelaB ON TabelaA.BrojA = TabelaB.BrojB
WHERE (((TabelaB.BrojB) Is Null))
ORDER BY TabelaA.BrojA;
Prvi broj koji nedostaje...
SELECT TOP 1 TabelaA.BrojA
FROM TabelaA LEFT JOIN TabelaB ON TabelaA.BrojA = TabelaB.BrojB
WHERE (((TabelaB.BrojB) Is Null))
ORDER BY TabelaA.BrojA;
[ captPicard @ 14.10.2010. 09:39 ] @
Hvala Zoran, za to rješenje znam, ali želio bih izbjeći temp tablicu. Došao sam do rješenja u međuvremenu sa UnionAll, ali pustit ču još otvoreno, možda netko da bolje rješenje.
[ mish_ns @ 14.10.2010. 12:00 ] @
Ovako ide za interbase. Pretpostavljam da ima nesto slicno ROWS u drugim bazama.(TOP....)
SELECT
(A.BROJ-1)
FROM
TABLICA A
WHERE
NOT exists (SELECT 1 FROM TABLICA B WHERE B.BROJ = (A.BROJ-1))
AND (A.BROJ NOT IN (SELECT max(C.BROJ) FROM TABLICA C))
ROWS 1
Mada iskreno, nije mi jasno bas kako ovaj upit radi, sta se tu prvo izvrsava...
Kad napisem samo:
select 1 from tablica where a=b+1
u setu dobijem 1 kao rezultat...
ako stavim select 10 dobijem 10 kao rezultat.
[ mish_ns @ 14.10.2010. 13:08 ] @
Ne treba ovaj deo:
AND (A.BROJ NOT IN (SELECT max(C.BROJ) FROM TABLICA C))
svakako sa ROWS 1 uzimas samo prvi br. iz seta (prethodno mora biti sortiran)
SELECT
(a.broj-1) AS NEDOSTAJE
FROM
TABLICA a
WHERE
NOT exists (SELECT b.broj FROM TABLICA b WHERE (b.broj = a.broj -1))
AND a.broj-1 not in (0)
ORDER BY a.broj
rows 1
Mislim da bi sa TOP islo ovako:
SELECT TOP (a.broj-1)
FROM
TABLICA a
WHERE
NOT exists (SELECT b.broj FROM TABLICA b WHERE (b.broj = a.broj -1))
AND a.broj-1 not in (0)
ORDER BY a.broj
i za druge baze postoji LIMIT....
Nadam se da je ista pomoglo....
[ captPicard @ 14.10.2010. 13:23 ] @
Hvala obojici, elegantno i efikasno rješenje!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.