Uvodna napomena Posto se u mozgalici koristi datum i vreme, moze doci do nekompatibilnosti izmedju raznih sistema za upravljanje bazama podataka. Ja sam u mozgalici upotrebio TIMESTAMP tip podataka koji u PostgreSQL-u obuhvata zajedno i datum i vreme. Slobodno promenite ovaj tip u vama odgovarajuci ili cak podelite ovu kolonu na dve (posebno datum, a posebno vreme) ako to vas sistem zahteva.
Imamo jednu firmu. Svi radnici imaju identifikacione kartice. Svaka kartica ima svoj jedinstveni identifikacioni broj. Radnici pri svakom ulasku i pri svakom izlasku iz firme svoju karticu provlace kroz citac kartica. Citac kartica kao rezultat citanja daje samo dve informacije:
1. identifikacioni broj kartice,
2. tacan datum i vreme provlacenja kartice.
Zbog pojednostavljenja cemo predpostaviti da radnici ne mogu napustati radno mesto u toku dana. Znaci, kada se jednom odjave zavrsili su posao za taj dan.
Recimo da smo iz citaca kartice dobili sledeci niz informacija:
ibk vreme
--- -------------------
1 2007-04-19 06:55:00
2 2007-04-19 06:57:00
3 2007-04-19 07:01:00
1 2007-04-19 14:00:00
3 2007-04-19 15:01:00
2 2007-04-19 15:12:00
--- -------------------
3 2007-04-20 06:57:00
2 2007-04-20 06:58:00
1 2007-04-20 06:59:00
2 2007-04-20 15:01:00
1 2007-04-20 15:02:00
3 2007-04-20 15:03:00
--- -------------------
1 2007-04-21 06:51:00
2 2007-04-21 08:13:00
3 2007-04-21 07:02:00
1 2007-04-21 14:59:00
3 2007-04-21 15:01:00
2 2007-04-21 17:20:00
Direktor firme zeli da dobije izvestaj o dolasku i odlasku s posla u sledecem obliku:
ibk dolazak odlazak
--- ------------------- -------------------
1 2007-04-19 06:55:00 2007-04-19 14:00:00
1 2007-04-20 06:59:00 2007-04-20 15:02:00
1 2007-04-21 06:51:00 2007-04-21 14:59:00
2 2007-04-19 06:57:00 2007-04-19 15:12:00
2 2007-04-20 06:58:00 2007-04-20 15:01:00
2 2007-04-21 08:13:00 2007-04-21 17:20:00
3 2007-04-19 07:01:00 2007-04-19 15:01:00
3 2007-04-20 06:57:00 2007-04-20 15:03:00
3 2007-04-21 07:02:00 2007-04-21 15:01:00
(Ovo je osnovni izvestaj. Kad imamo njega lako je praviti ostale izvestaje tipa: kasnjenje u minutima, trajanje radnog dana, duzina produzenog rada,...)
Znaci kao pocetak imamo jednu tabelu:
CREATE TABLE provlacenja (
ibk INTEGER NOT NULL,
vreme TIMESTAMP NOT NULL
);
INSERT INTO provlacenja (ibk, vreme) VALUES ( 1, '2007-04-19 06:55:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 2, '2007-04-19 06:57:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 3, '2007-04-19 07:01:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 1, '2007-04-19 14:00:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 3, '2007-04-19 15:01:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 2, '2007-04-19 15:12:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 3, '2007-04-20 06:57:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 2, '2007-04-20 06:58:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 1, '2007-04-20 06:59:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 2, '2007-04-20 15:01:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 1, '2007-04-20 15:02:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 3, '2007-04-20 15:03:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 1, '2007-04-21 06:51:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 2, '2007-04-21 08:13:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 3, '2007-04-21 07:02:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 1, '2007-04-21 14:59:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 3, '2007-04-21 15:01:00');
INSERT INTO provlacenja (ibk, vreme) VALUES ( 2, '2007-04-21 17:20:00');
Kao rezultat treba da se dobije gornji izvestaj. U resavanju se mogu koristi pomocne tabele, trigeri, procedure, sve sto vam padne na pamet. Bitno je doci do resenja :)
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming." - Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo