Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Broj koji nedostaje

[es] :: Baze podataka :: Broj koji nedostaje

[ Pregleda: 3650 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Broj koji nedostaje14.10.2010. u 07:59 - pre 164 meseci
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!
F
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
..106.109.adsl.dyn.beotel.net.

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Broj koji nedostaje14.10.2010. u 09:11 - pre 164 meseci
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;

 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Broj koji nedostaje14.10.2010. u 09:39 - pre 164 meseci
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.
F
 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
212.178.231.*



+18 Profil

icon Re: Broj koji nedostaje14.10.2010. u 12:00 - pre 164 meseci
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.

 
Odgovor na temu

mish_ns
Miloš Krstin

Član broj: 159930
Poruke: 1105
212.178.231.*



+18 Profil

icon Re: Broj koji nedostaje14.10.2010. u 13:08 - pre 164 meseci
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....
 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Broj koji nedostaje14.10.2010. u 13:23 - pre 164 meseci
Hvala obojici, elegantno i efikasno rješenje!
F
 
Odgovor na temu

[es] :: Baze podataka :: Broj koji nedostaje

[ Pregleda: 3650 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.