[ lukas19 @ 14.06.2010. 12:14 ] @
Pocetnik sma u radu sa bazama podataka . Imam jedan problem. Da li neko moze da mi objasni kako da grupisem datume??? Naime, radi se o tome sto imam jedan zadatak u kojem mi se trazi da iz tabele RADNIK{mbr_rad, ime_rad, dat_rodj, pol, dat_zaposlenja, sif_rm} navedem godine u kojima se zaposlilo najvise radnika!!! E sada, "dat_zaposlenja" mi je tipa 'I992-07-011' do '1996-08-12', stim sto u okviru tih godina imam vise datuma zaposlenja. meni je problem da te datume pretvorim samo u GODINU zaposlenja (bez meseca i dana u godini) i da onda te godine iskoristim za grupisanje Radnika.

sema tabele: RADNIK{mbr_rad, ime_rad, dat_rodj, pol, dat_zaposlenja, sif_rm}


Pokusavao sma preko upita:

SELECT count(radnik), dat_zaposlenja -- kako bi mogao da datum zaposlenja pretvorim samo u godinu zaposlenja, bez meseca i dana u godini--
FROM radnik
GROUP by dat_zaposlenja

Medjutim , problem je u tome sto mi on grupise samo randike koji su zapsleni istog dana u godini, ali ne i radnike koji su zaposleni iste godine.
[ djoka_l @ 14.06.2010. 12:22 ] @
select count(*), funkcija_za_dobijanje_godine(dat_zaposlenja)
from radnik
group by funkcija_za_dobijanje_godine(dat_zaposlenja)

E sad, kako nisi rekao koja je baza u pitanju i koji je tip polje 'dat_zaposlenja' možemo samo da nagađamo koju funkciju da napišemo.
Kakva je to godina iz tvog prvog primera 'I992-07-011' ???
Ako je u pitanju tekst podatak, onda bi jedan substr(dat_zaposlenja,1,4) dao godinu. Ako je datumski podatak, onda možda na bazi na kojoj radiš postoji funkcija YEAR(dat_zaposlenja) ili TO_CHAR(dat_zaposlenja, 'YYYY').

Sada uputsvo u ruke i traži funkcije za konverziju datuma...
[ lukas19 @ 14.06.2010. 13:19 ] @
Izvini, u pitanju je funkcija smalldate...
[ lukas19 @ 14.06.2010. 13:22 ] @
Hvala prijatelju, radi!!! svaka cast. Pretvori sam smalldate funkicojom YEAR u godinu, izlistao sam rezultate i to je super. Medjutim, sada treba da izdvojim godinu u kojoj se zaposlilo najvise zaposlenih.

radnik godina
3 1992
4 1993
6 1994
8 1995
2 1996


Da li cu moci problem da resim preko privremene tabele? Radim sada pa cu da posaljem rezultat.

[ lukas19 @ 14.06.2010. 13:50 ] @
Evo ga moj rezultat.

--select YEAR(dat_zaposljavanja) as datumZaposlenja, count(mbr_rad) as radnik
into #najviseradnika
from RADNIK
group by year(dat_zaposljavanja)

SELECT radnik, datumZaposlenja
FROM #najviseradnika
where radnik in (select max(radnik) from #najviseradnika )--

Izgleda da radi kako treba.

hvala puno
[ djoka_l @ 14.06.2010. 14:21 ] @
Pretpostavljam da je u pitanju MSSQL baza.

Ako je to tačno, može i kraće da se napiše:

Code (sql):

SELECT TOP 1 YEAR(dat_zaposljavanja) AS datumZaposlenja, COUNT(mbr_rad) AS radnik
FROM RADNIK
GROUP BY YEAR(dat_zaposljavanja)
ORDER BY COUNT(mbr_rad) DESC
 
[ lukas19 @ 14.06.2010. 14:34 ] @
Jeste, MS SQL . Ovo je jos brze. Hvala ti puno
[ vlada_vlada @ 15.06.2010. 09:50 ] @
Pretposlednji je dobar. Sta ako ima vise godina kada se zaposlio isti (max) broj radnika ?

Nego, moze i bolje - bez privremene tabele, samo sa 1 ugnezdjenim upitom :)
[ lukas19 @ 21.06.2010. 12:11 ] @
I jos jedno pitanje, da li neko moze da mi objasni ovaj izraz

Imam prijemnicu (brpri, datpri, sifrobe). => gde je 'datpri' Datum Prijemnice, a brpri Broj prijemnice

brpri --- - datpri ---- sifrobe
11 2001-01-11 . . 5
15 2001-01-13 . . 4
23 2001-01-16 . . 3
24 2001-01-16 . .. 4
32 2001-01-26 . . 2
37 2001-02-01 . . 1
47 2001-02-07 . . 2
11 2001-01-11 . . 3

Zadatak: Koliko se prijemnica javlja u proseku dnevno, ako je 7.februara izdata projemica sa rednim brojem 47? Inace, 7 februar mi je zadnji datum u tabeli, a godine su sve 2001.

resenje:

SELECT 47/(max(convert(dec,datpri))-min(convert(dec,datpri))) as br_pri_dnevno
FROM prijemnica

problem je sto ja ne razumem kako ovo funkcionise. U stvari, max(convert(dec,datpri)) pretvara datum u decimalan broj, ali ja ne znam na koji nacin. Na koji se nacin to odvija. Pokusavao sam da malo eksperimentisem i pokusavao sam da listu datuma pretvorim u neki broj (sve u okviru tabele prijemnice)
i dobijao sam sledece rezultate:

converted
36900
36902
36905
36905
36915
36921
36927
36900

I naravno, u okviru ovih rezultata funkcija Max i Min su radile svoj posao. Izabrale su svoje najvece odnosno najmanje vrednosti. Mene zanima, samo nacin pretvaranja convert(dec, datpri). Na koji se nacin dolazi do gore navedenih vredsnoti.