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

T-SQL upit - sumiranje

[es] :: Baze podataka :: T-SQL upit - sumiranje

[ Pregleda: 2560 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

hninel
local

Član broj: 9446
Poruke: 34
*.bstelecom.ba.

Sajt: www..???


Profil

icon T-SQL upit - sumiranje14.06.2005. u 13:25 - pre 200 meseci
Pozdrav...
Imam slijedeci zadatak:

Potrebno je da sumiram radno vrijeme radnika koji se tokom dana po nekoliko puta loguju i odloguju. Podaci se nalaze u jednoj tabeli, tipa:

id, UserID, LogInOut, Time....

Kolona LogInOut moze imati neku od dvije vrijednosti (0,1)
Login = 1
Logout = 0
-------------------------------------------------------

Znaci, korisnik se u odredjeno vrijeme logira na sistem i to se upisuje u tabelu. ID je autoincrement, UserID - broj korisnika, u kolonu se upisuje '1', i u Time kolonu se upisuje vrijeme logiranja.
Isto tako kad se korisnik odloguje upisuju se podaci u tabelu i vrijeme tog desavanja.

Potrebno je prikazat koliko je dugo radio, znaci koliko je bio logiran...

Hvala.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: T-SQL upit - sumiranje14.06.2005. u 14:38 - pre 200 meseci
Predlazem da napravis prvo dva kveria (views ako radis u MS SQL). Kveriji su prosti:

vwLogIn:
Code:

SELECT tblLogTable.Id, tblLogTable.UserID, tblLogTable.LogInOut, tblLogTable.Time
FROM tblLogTable
WHERE (((tblLogTable.LogInOut)=1));


vwLogout:
Code:

SELECT tblLogTable.Id, tblLogTable.UserID, tblLogTable.LogInOut, tblLogTable.Time
FROM tblLogTable
WHERE (((tblLogTable.LogInOut)=0));

Kao sto vidis, kveriju prikazuju sve LogIn i sve LogOut operacije. Ako pretpostavimo da svaku LogIn operaciju prati LogOut operacija, onda moze da se napise treci kveri, koji koristi prethodna dva:

vwLogInOut:
Code:

SELECT vwLogIn.UserID, vwLogIn.Time, vwLogOut.Time
FROM vwLogIn, vwLogOut
WHERE (((vwLogOut.Id)=(SELECT MIN(id) FROM vwLogOut WHERE vwLogout.ID>vwLogIn.ID AND vwLogIn.UserID=vwLogOut.UserID)))
ORDER BY vwLogIn.Time;


Ovo je sve cut/paste iz Access-a (tamo brze napravim tabelu :-)
ali bi trebalo da bez ikakvih izmena da radi i u MS SQL. Za druge platforme - eto ti ideja - subkveri u WHERE iskazu.

Ovo sve radi ako i samo ako posle svakog LogIn sledi LogOut. Ako aplikacija dozvoljava da se naprimer neko dva puta LogIn bez LogOut izmedju, nece biti tacan racun, ali tu nije kveri kriv.

Mozda ti treba i neki kveri koji pronalazi slocajeve visetrukog LogIn ili LogOut, bez odgovarajuce kontra operacije? Ili nesto sto lovi slucajeve kad se neko uloguje danas a odloguje posle tri dana?

:-)
 
Odgovor na temu

[es] :: Baze podataka :: T-SQL upit - sumiranje

[ Pregleda: 2560 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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