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

Upit koji odredjuje prvi slobodan broj iz unetih slogova

[es] :: MS SQL :: Upit koji odredjuje prvi slobodan broj iz unetih slogova

[ Pregleda: 1705 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djvlajko

Član broj: 89354
Poruke: 297
82.117.218.*



Profil

icon Upit koji odredjuje prvi slobodan broj iz unetih slogova03.10.2017. u 15:32 - pre 41 meseci
Program je napisam u Vb6 i Sql 2008 R2.

Jedan njegov deo azurira tabelu stranaka cija je struktura

Stranke
-------
stranka_jmbg - nvarchar(13)
datum_prijema - date
redni_broj - smallint

Svakog dana, ispocetka, stranke se primaju i pocinju od rednog broja 1 i svaka sledeca dobija broj uvecan za 1.

Problem je u tome sto se neke stranke vrate i zele da odustanu. One se brisu i njihovo mesto je upraznjeno.
Prazna mesta je potrebno popuniti sa novopridoslom strankom.

Da bi resio problem, uveo sam pomocnu tabelu Brojevi :

Brojevi
-------
Broj - smallint

Tabela ima 1000 slogova sa vrednostima od 1 - 1000.

Upitom :

Code:


select min(Broj) as SledeciBroj from Brojevi left join (select Redni_broj as BrojUzorka from Stranke where Datum_prijema = '" & TekuciDan & "' Tmp on Tmp.BrojUzorka = Brojevi.Broj where Tmp.BrojUzorka IS NULL



gde je TekuciDan = tekuci radni dan - datum.

Ovo mi daje sledeci slobodan broj uzimajuci u obzir i praznine nastale brisanjem, ali mi se cini da je malo "grubo" ...

Kako bi se ovo moglo napisati, a da bude sto brze za izvodjenje.

Hvala ...


 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1335
*.dynamic.sbb.rs.



+309 Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova03.10.2017. u 16:36 - pre 41 meseci
Code (sql):

SELECT ISNULL(MIN(Redni_broj), 0) + 1 AS Sledeci FROM Stranke
WHERE (Redni_broj + 1) NOT IN (SELECT RB.Redni_broj FROM Stranke AS RB)
 

 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+709 Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova03.10.2017. u 16:39 - pre 41 meseci
Taj način je ok. Ono što nije OK je način kako interpolišeš TekuciDan u svoj query. Takođe, ceo koncept ponovnog korišćenja brojeva je sumnjiv, nadam se da imaš jak razlog zašto to radiš.
 
Odgovor na temu

djvlajko

Član broj: 89354
Poruke: 297
*.dynamic.isp.telekom.rs.



Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova03.10.2017. u 17:57 - pre 41 meseci
Da, bilo bi lepo kada ne bih morao da koristim praznine ali moram,

dusans, kako ce se ponasati NOT IN ako u tabeli stranke postoji 500.000 - 5.000.000 slogova sto je realno za ocekivati. Znam da sam u nekim situacijama uocio prinetno usporenje kada sam koristio tu
instrukciju ...
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6006



+4618 Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova03.10.2017. u 18:48 - pre 41 meseci
Vodi samo racuna ako je multi-user sistem, lako moze da se desi da dve transakcije povuku isti slobodni broj, u tom slucaju moras da provuces sve ovo kroz neku exclusive lock transakciju.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+709 Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova04.10.2017. u 08:51 - pre 41 meseci
@djvlajko: ja bih lično pre išao na tvoje rešenje nego na @dusans-ovo, naravno pod uslovom da si siguran da nikad nećeš imati više od 1000 ili koliko već brojeva.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1335
*.dynamic.sbb.rs.



+309 Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova04.10.2017. u 09:28 - pre 41 meseci
Vlajko, nisam shvatio da se u stvari bojiš problema sa performansama,
već sam mislio da si iz nezanja iskomplikovao rešenje sa dodatnom tabelom,
pa sam ti predložio trik sa R + 1 bez detaljisanja oko filtera po datumu, itd.

Umesto NOT IN možeš da probaš i drugu varijantu:
Stranke filetrovane po datumu left join na isto to preko R = R + 1
gde je join-vani rekord null.
Index nad datumom i rednim brojem kakvo god rešenje da praviš.

Rešenje sa dodatnom tabelom kakvo si dao obično bude performantnije.
 
Odgovor na temu

djvlajko

Član broj: 89354
Poruke: 297
82.117.218.*



Profil

icon Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova04.10.2017. u 15:35 - pre 41 meseci
Mislim da je i to predimenzionisan broj (600). Rec je o broju stranaka koje salter moze da primi za 8 sati rada ...

Ipak cu se ja drzati opcije sa pomocnom tabelom. Bitna mi je brzina, a kako @dusans kaze, bolje su performanse (u tom slucaju).

Hvala na savetima i pomoci
 
Odgovor na temu

[es] :: MS SQL :: Upit koji odredjuje prvi slobodan broj iz unetih slogova

[ Pregleda: 1705 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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