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

potrebna sql procedura ...

[es] :: MS SQL :: potrebna sql procedura ...

[ Pregleda: 3378 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mladenvasic
Mladen Vasic
Doboj

Član broj: 50512
Poruke: 124
*.teol.net.



Profil

icon potrebna sql procedura ...16.05.2006. u 18:30 - pre 218 meseci
pozdrav svima,

Potrebno mi je da u SQL Server-u 2000 napravim proceduru npr. "get_time" (koju cu kasnije pozvati iz nekog programa)
Ta procedura treba da mi selektuje sve radnike iz tabele "RADNIK" i da mi za svakog radnika izracuna
ukupno provedeno vrijeme u firmi. Vrijeme ulaza i izlaza radnika u firmi je upisano u tabelu "LOG".

Code:
Ime tabele: LOG

 id       datum       vrijeme    ui   si
--------------------------------------
00001 | 16.05.2006  | 18:23:01 |  1 |  0
00001 | 16.05.2006  | 18:28:21 |  0 |  1
00001 | 16.05.2006  | 18:33:11 |  1 |  0
00001 | 16.05.2006  | 18:45:51 |  0 |  0
00001 | 16.05.2006  | 18:53:35 |  1 |  0
00001 | 16.05.2006  | 19:00:51 |  1 |  0

Naziv,tip i opis kolona:
id      char(5)  - identifikaciona vrijednost  radnika
datum   char(10)  - datum upisa rekorda
vrijeme char(8)   - vrijeme upisa rekorda
ui      bit       - ako je 1, radnik je usao u firmu. 0, ako je izasao.
si      bit       - ako je 1, radnik je sluzbeno izasao iz firme. 0, nesluzben izlaz


Znaci,
SQL upitom treba da selektujem sve rekorde u tabeli "LOG" cija je vrijednost id-a "00001"
(naravno u tabeli "LOG se nalaze svi rekordi od svih radnika") i da za tog radnika tj. "id" dobijem
ukupno provedeno vrijeme u firmi.

Treba uzeti u obzir sledece:
1. Ako je radnik sluzbeno izasao iz firme (ako je vrijednost "ui=0" i "si=1") racuna se da je u firmi,
tj. to vrijeme je dodato ukupnom vremenu provedenom u firmi.
Npr. prva 2 rekorda u primjeru tabele, vidimo da je radnik usao u 18:23:01 (ui=1,si=0) i potom
sluzbeno izasao u 18:28:21 (ui=0,si=1).
2. Ako je radnik nesluzbeno izasao (ui=0,si=0), vrijeme provedeno van firme nije dodano ukupnom
vremenu provedenom u firmi.
Npr. 3. i 4. rekord u tabeli, poslije ulaza radnik je nesluzbeno napustio firmu (ui=0,si=0).
3. U slucaju ako dva susjedna rekorda imaju istu vrijednost ui-a npr. 1,1 ili 0,0, ta dva rekorda
se ne uzimaju u obracunavanje posto je radnik pogresno registrovan (ne moze biti dva ulaza ili dva
izlaza u dvije registracije). Npr. rekord 5 i 6 u tabeli, ulaz u 18:53:35 pa opet ulaz u 19:00:51

IMA LI KO KAKVU IDEJU KAKO DA SE OVO RIJESI, DA LI JE MOGUCE SQL-OM ILI MORAM PROGRAMSKI???
NADAM SE DA SAM DOBRO POJASNIO :-)
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: potrebna sql procedura ...17.05.2006. u 08:12 - pre 218 meseci
Evo ja ću da probam da ti dam ideju:

Napraviš temp tabelu sa jednim autoincrement (indentity) poljem i u nju ubaciš slogove sortirane po radnicima, pa po vremenu.

Uradiš JOIN na sledeću foru:
Code:
SELECT *, L2.VREME - L1.VREME AS TRAJANJE FROM #LOG L1
LEFT JOIN #LOG L2 ON (L2.ID = L1.ID + 1) AND (L2.UI = 0) AND (L1.RADNIKID = L2.RADNIKID)
WHERE
L1.UI = 1
AND L2.VREME IS NOT NULL

Tako nešto. Time računaš vreme provedeno u firmi. Na sličan način računaš i vreme provedeno službeno van firme.

Sve to skrkaš u stored proceduru i ne bi trebalo da bude problema.

[Ovu poruku je menjao jablan dana 17.05.2006. u 09:12 GMT+1]
 
Odgovor na temu

mladenvasic
Mladen Vasic
Doboj

Član broj: 50512
Poruke: 124
*.teol.net.



Profil

icon Re: potrebna sql procedura ...17.05.2006. u 20:45 - pre 218 meseci
OK, hvala puno ... evo sad cu probati
Ako jos neko ima kakvu ideju neka se javi ...
 
Odgovor na temu

mladenvasic
Mladen Vasic
Doboj

Član broj: 50512
Poruke: 124
*.teol.net.



Profil

icon Re: potrebna sql procedura ...18.05.2006. u 20:42 - pre 218 meseci
probao sam, nije lose ...
koliko sam zapazio ova procedura kupi iz temp tabele parove rekorda npr. 1. i 2., 3. i 4., 5. i 6. itd.,
oduzima manje od veceg vremena itd...
mana je sto za svaki par pravi novi rekord, iako je kod svih parova isti jmb radnika.
meni treba da mi sumira sva vremena prisutnosti jednog jmb pa drugog itd.

ali sve u svemu pomaze mi i ovo... uputili ste me gdje treba.

ako jos neko ima ideju neka se javi ...

i jos nesto, kako se moze sumirati citava jedna kolona tipa datetime,
sum funkcija radi samo sa brojcanim vrednostima, ako se ne varam...
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: potrebna sql procedura ...18.05.2006. u 21:33 - pre 218 meseci
Citat:
mladenvasic
i jos nesto, kako se moze sumirati citava jedna kolona tipa datetime,
sum funkcija radi samo sa brojcanim vrednostima, ako se ne varam...

Mozda da pretvoris u UNIX timestamp to je valjda obican broj jedino treba obratiti paznju na velicinu tipa podataka (tj. da li rezultat sabiranja moze da stane u INTEGER polje ili sta vec MS SQL ima)
Owl
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: potrebna sql procedura ...19.05.2006. u 07:41 - pre 218 meseci
Umesto prostog oduzimanja datuma na MSSQL možeš koristiti funkciju DATEDIFF
DATEDIFF(mi, vreme1, vreme2) ti daje razliku između dva vremena u minutima.
Takođe možeš nad datim upitom uraditi i grupisanje po ID radnika i SUM() nad razlikom.

Nešto kao:
Code:

SELECT L1.RADNIKID, SUM(DATEDIFF(mi, L1.VREME, L2.VREME)) AS TRAJANJE FROM #LOG L1
LEFT JOIN #LOG L2 ON (L2.ID = L1.ID + 1) AND (L2.UI = 0) AND (L1.RADNIKID = L2.RADNIKID)
WHERE
L1.UI = 1 AND L2.VREME IS NOT NULL
GROUP BY L1.RADNIKID


Eto dobio si gotov upit iako mi to nije praksa

[Ovu poruku je menjao jablan dana 19.05.2006. u 08:42 GMT+1]
 
Odgovor na temu

mvasicdo
Mladen Vasic
Doboj

Član broj: 104294
Poruke: 226
*.teol.net.



Profil

icon Re: potrebna sql procedura ...10.01.2007. u 09:57 - pre 210 meseci
pozdrav, da se nadovezem na vec stariju temu.


Code:
SELECT L1.RADNIKID, SUM(DATEDIFF(mi, L1.VREME, L2.VREME)) AS TRAJANJE FROM #LOG L1
LEFT JOIN #LOG L2 ON (L2.ID = L1.ID + 1) AND (L2.UI = 0) AND (L1.RADNIKID = L2.RADNIKID)
WHERE
L1.UI = 1 AND L2.VREME IS NOT NULL
GROUP BY L1.RADNIKID


moze li se ovaj upit prepraviti tako da ako nema izlaza (tj. ako je radnik jos u firmi), da uzima trenutno vrijeme i da na osnovu vremena ulaza i ovog trenutnog vremena izravuna sumu vremena provedenog u firmi
 
Odgovor na temu

[es] :: MS SQL :: potrebna sql procedura ...

[ Pregleda: 3378 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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