|
[ 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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|