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

Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?

[es] :: MS SQL :: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?

[ Pregleda: 6481 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?10.01.2009. u 20:12 - pre 186 meseci
Čitao sam ovde po forumu, pre nego što sam postavio ovu poruku, ali nisam našao to šte me zanima, pa ajde da pitam.

imam problem koji ne znam kako da rešim.

U vremenskoj evidenciji radnika, treba da izračunam

1. Koliko je svaki radnik radio u toku meseca
2. Koliko je svaki radnik radio u toku godine.

Tabela izgleda ovako:

EvidencijaID --- RadnikID ---- VremeDolaska --- Vreme Odlaska

1 ------------- 7 ---------- 01.01.2009 08:30 ----- 01.01.2009 17:15
2 ------------- 7 ---------- 02.01.2009 08:45 ----- 02.01.2009 18:00
3 ------------- 7 ---------- 03.01.2009 08:40 ----- 03.01.2009 17:45


Rezultat treba da bude

RadnikID --------- časova na radu

7 ---------------- 186
8 ---------------- 160
9 ---------------- 170

itd. itd

Mučio sam se sa Group By procedurom, ali ništa nisam uspeo da uradim.

Zna li neko rešenje za ovo ?

10x thanks in advance

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?10.01.2009. u 22:15 - pre 186 meseci
Code:

select RadnikId, SUM(DATEPART(Hh, VremeOdlaska - VremeDolaska)) + SUM(DATEPART(mi, VremeOdlaska - VremeDolaska))/60.0
from Evidencija
group by RadnikId


ovo ti je da vidis skolskio resenje, a sledece ti je optimalno resenje koje se bazira na prirodi datetime polja (float koji kao celobrojni deo nosi broj dana):


Code:

select RadnikId, SUM(CAST(VremeOdlaska - VremeDolaska as float))*24.0
from Evidencija
group by RadnikId



oba ce ti dati isto resenje uz mozda razliku na nekoj decimali
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

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?10.01.2009. u 22:52 - pre 186 meseci
@mmix: puno hvala za odgovor. Jednostavno, a super mi radi posao.

Samo još jedno pitanje, ako je to uopšte moguće uraditi

Evo sada sam postavio sledeće primere, da testiram rad.

EvidencijaID --- RadnikID ---- VremeDolaska --- Vreme Odlaska
1 ------------- 7 ---------- 01.01.2009 09:00:00 ----- 01.01.2009 17:15:00
2 ------------- 7 ---------- 02.01.2009 10:10 ----- 02.01.2009 17:15

Radnik je prvog dana radio: 8 sati i 15 minuta
Radnik je drugog dana radio: 7 sati i 5 minuta

sve skupa je radio 15 sati i 20 minuta

a meni, bilo koje od ova 2 rešenja pokazuje : 15, 33

ok .. jasno mi je da je 20 minuta, jedna trećina od 60 minuta, tj punog sata, ali da li može da se dobije baš 15 sati i 20 minuta ? .. nije problem ni ako je u 2 kolone.

A nije problem ni ovako, nego, pokazao sam korisniku kako će izgledati report, pa da se sad ne ubeđujem sa njim da to ne može.

U svakom slučaju puno ti hvala, sačuvao si mi vreme !!!

Pozdrav, svako dobro


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?11.01.2009. u 07:39 - pre 186 meseci
Sve je moguce U prvoj varijanti samo moras da pazis da suma minuta preko 60 minuta doda sate u prvu kolonu. U drugoj varijanti je samo sistem da svedes float na osnovu 1440 (broj minuta u danu) da bi izvukao minute.

Code:

select RadnikId, SUM(DATEPART(Hh, VremeOdlaska - VremeDolaska)) + SUM(DATEPART(mi, VremeOdlaska - VremeDolaska))/60 as Sati,
    SUM(DATEPART(mi, VremeOdlaska - VremeDolaska)) % 60 as Minuta
from Evidencija
group by RadnikId


ili brza varijanta

Code:

select RadnikId, FLOOR(SUM(CAST(VremeOdlaska - VremeDolaska as float))*24) as Sati,
        CAST(FLOOR(SUM(CAST(VremeOdlaska - VremeDolaska as float))*1440) as int) % 60 as Minuta
from Evidencija
group by RadnikId

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

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?11.01.2009. u 22:10 - pre 186 meseci
Kralju !!!

Ova prva varijanta je tacnija.

jer je na osnovu primera koji sam dao, tacno izračunato da je radnik radio 8 sati i 20 minuta, dok je druga solucija izračunala 8 sati i 19 minuta.


Pozdrav i hvala još jednom !!
 
Odgovor na temu

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?11.01.2009. u 22:56 - pre 186 meseci
Sad me zanima još nešto,

da li je moguće, na osnovu podataka, napraviti i godišnju evidenciju dolazaka ?

na primer

EvidencijaID --- RadnikID ---- VremeDolaska --- Vreme Odlaska
1 ------------- 7 ---------- 01.01.2009 09:00:00 ----- 01.01.2009 17:15:00
2 ------------- 7 ---------- 02.01.2009 10:10 ----- 02.01.2009 17:15
.
.
.
1 ------------- 7 ---------- 01.02.2009 09:00:00 ----- 01.02.2009 17:15:00
2 ------------- 7 ---------- 02.02.2009 10:10 ----- 02.02.2009 17:15


RADNIKID --- MESEC ---- UKUPNO SATI NA POSLU ?

Zanima me, kako da izvučem mesec iz vremena, i napravim grupisanje po mesecima ?


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?11.01.2009. u 23:30 - pre 186 meseci
ma ok, u principu ako bi stavio ROUND umesto FLOOR i druga bi bila precizna jer bi kompenzovalo greske u zaokruzivanju.

A sto se tice meseca, DATEPART() funkcija je tvoje resenje, kao sto sam vadio sate i minute tako moze da vadi i mesece i godine, pogledaj help.
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

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?12.01.2009. u 15:40 - pre 186 meseci
OK, puno hvala za pomoc !!

pozdrav
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
91.148.82.*

ICQ: 20785904


+4 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?13.01.2009. u 02:31 - pre 186 meseci
ak neko ostane do posle 12 nocu na poslu, nece mu dobro odraditi obracun, pa bi valjalo uzeti u obzir i dan u mesecu. posto neko moze da zagine i zadnjeg dana u mesecu, valjalo bi obratiti paznju i na mesec. a mozda neki baksuz moradne novu god da proslavi u firmi pa bi valjalo ukalkulisati i godinu... sve to radis analogno ovome kako ti je mmix rekao.
(uzimanje u obzir ovih stvari moze malcice da ti zakomplikuje mesecne obracun - interval koji probije neki mesec ces da skratis na interval do kraja zadnjeg dana u mesecu , interval koji je zapoceo u prethodnom mesecu ces da skratis na pocetak tog meseca...)

treba ljudima da napomenes, da ukoliko zaborave da se prijave, ili odjave, taj dan im uopste nece ulaziti u obracun radnog vremena

ukoliko se se nekom 2 intervala preklope, nece dobro racunati (tvoja racuna podrazumeva da su intervali disjunktni)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?13.01.2009. u 07:41 - pre 186 meseci
pa radice sa posle 12, samo nece raditi sa prelaskom u sledeci mesec kad se grupise po mesecu. U principu se to radilo kad nsa tako sto se 1. u mesecu u 00:00 radio "presek", svi jos uvek otvoreni su zatvoreni u 0:0 i otvoreni ponovo u 0:0 da bi sistem radio.


preseci mogu da se pojave samo ako je neko izasao a nije cekirao i onda se ponovo cekirao nazad, sa tehnickog aspekta mu ne otvaras novu stavku vec nastavljas staru i sve je ok, a kako ces da resis poslovnu stranu toga (neplacanje laznog prekovremenog, kazne i slicno) to vec resavas kako sef nalaze (mozda email sefu pa rucni unos kontra stavke sa negativnim timespanom da kompenzuje).
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

[es] :: MS SQL :: Kako sabrati vreme ? -- tj izracunati dnevnu evidenciju rada ?

[ Pregleda: 6481 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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