Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Upit koji odredjuje prvi slobodan broj iz unetih slogova

  • 7 odgovora
  • 3.913 pregleda

Najnovija ↓

Upit koji odredjuje prvi slobodan broj iz unetih slogova 03.10.2017. u 16:32 · pre 110 meseci #1
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 ...


Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova 03.10.2017. u 17:36 · pre 110 meseci #2
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)
 

Sviđa mi se2
Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova 03.10.2017. u 18:57 · pre 110 meseci #4
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 ...
Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova 03.10.2017. u 19:48 · pre 110 meseci #5
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.
Potpis
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ć
Sviđa mi se1
Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova 04.10.2017. u 10:28 · pre 110 meseci #7
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.
Re: Upit koji odredjuje prvi slobodan broj iz unetih slogova 04.10.2017. u 16:35 · pre 110 meseci #8
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme