DROP TABLE VIGILI;
DROP TABLE MULTE;


CREATE TABLE VIGILI(
	IDV	CHAR(4) NOT NULL PRIMARY KEY,
	NOME 	VARCHAR(20) NOT NULL,
	COGNOME VARCHAR(20) NOT NULL,
	PRESASERVIZIO DATE NOT NULL		 );

CREATE TABLE MULTE(
	IDM 	CHAR(6) NOT NULL PRIMARY KEY,
	IDV	CHAR(4)	NOT NULL REFERENCES VIGILI,
	TARGA 	CHAR(7) NOT NULL,
	DATA	DATE	NOT NULL,
	EURO	DEC(6,2) NOT NULL CHECK (EURO > 0)	);


INSERT INTO VIGILI VALUES
('V123','Marco','Rossi','24.11.2018'),
('V456','Luca','Verdi','28.11.2018'),
('V555','Anna','Neri','19.01.2019')
;


INSERT INTO MULTE VALUES
('M12345','V123','AB123CD','12.01.2019',127.35),
('M12348','V123','AB123CD','12.01.2019',49.00),
('M12356','V123','BC444EG','25.01.2019',62.20),
('M13845','V123','BC555HL','25.01.2019',104.15),
('M13952','V123','BC666EA','30.01.2019',32.70),

('M45611','V456','BE123GG','12.01.2019',43.25),
('M45666','V456','BF435AA','25.01.2019',52.00),
('M45672','V456','CD111DC','25.01.2019',62.20),
('M45681','V456','EF001AB','30.01.2019',92.15),
('M45690','V456','DD127HY','30.01.2019',35.70),

('M55511','V555','DE498GG','25.01.2019',137.10),
('M55522','V555','EF999DT','30.01.2019',75.00),
('M55533','V555','EF999DT','31.01.2019',125.00)

;




-- 2.1
SELECT 	V.IDV,V.Nome,V.Cognome, DEC(AVG(M.Euro),6,2) AS ImportoMedio
FROM   	VIGILI V, MULTE M
WHERE	V.IDV = M.IDV
AND	DAYS(M.Data) - DAYS(V.PresaServizio) < 60
GROUP BY V.IDV,V.Nome,V.Cognome
ORDER BY ImportoMedio DESC;


-- 2.2
WITH 
NumMulte(Data,Fascia,Num) AS
(	SELECT 	Data, INT(Euro)/50, COUNT(*)
	FROM	MULTE
	WHERE   Targa <> 'BC345HH'
	GROUP BY Data, INT(Euro)/50 ),
FasciaPiuFrequente(Data,Fascia) AS
(	SELECT 	M.Data,M.Fascia	
	FROM 	NumMulte M
	WHERE  	M.Num >= ALL 
	    (	SELECT M1.Num 
		FROM 	 NumMulte M1 
		WHERE  M1.Data = M.Data ) )
SELECT	 (50*Fascia) CONCAT '-' CONCAT (50*(Fascia+1)-1) AS Fascia, 
 	 COUNT(*) AS NumGiorni
FROM 	 FasciaPiuFrequente
GROUP BY Fascia;


GRANT SELECT ON VIGILI TO PUBLIC;
GRANT SELECT ON MULTE TO PUBLIC;










