DROP TABLE FURGONI;
DROP TABLE VIAGGI;
DROP TABLE RIFORNIMENTI;

CREATE TABLE FURGONI (
	Targa	 CHAR(10) NOT NULL PRIMARY KEY,
	Sede	 VARCHAR(20) NOT NULL 		);

CREATE TABLE VIAGGI (
	Targa	 CHAR(10) NOT NULL REFERENCES FURGONI,
	Data	 DATE 	NOT NULL,
	OraPartenza TIME NOT NULL,
	OraArrivo   TIME NOT NULL,	
	KmPercorsi INT	CHECK (KmPercorsi > 0),
	LitriUsati DEC(6,2) NOT NULL CHECK (LitriUsati > 0),
	CHECK (OraArrivo > OraPartenza),
	PRIMARY KEY (Targa,Data,OraPartenza)	);

CREATE TABLE RIFORNIMENTI (
	Targa	 CHAR(10) NOT NULL REFERENCES FURGONI,
	Data	 DATE 	NOT NULL,
	Ora	 TIME NOT NULL,
	NumLitri DEC(6,2) NOT NULL CHECK (NumLitri > 0),
	PRIMARY KEY (Targa,Data,Ora)		);

INSERT INTO FURGONI VALUES
('EC123CD','Bologna'),
('EC234EF','Bologna'),
('FF412CG','Modena'),
('FB481HJ','Modena');

INSERT INTO VIAGGI VALUES
('EC123CD','27.10.2019','05:32','08:14',250,20.5),
('EC123CD','25.11.2019','06:21','15:12',832,64.5),
('EC123CD','04.01.2020','05:32','08:14',250,20.5),
('EC123CD','07.01.2020','08:15','19:02',915,70.0),

('EC234EF','25.12.2019','09:32','10:27',102,10.1),
('EC234EF','28.12.2019','12:41','19:17',615,50.3),
('EC234EF','12.01.2020','09:14','12:35',251,20.3),

('FF412CG','18.11.2019','08:45','22:18',972,70.5),
('FF412CG','20.12.2019','08:01','11:52',350,29.8),
('FF412CG','12.01.2020','08:32','12:27',412,35.7),
('FF412CG','13.01.2020','08:14','15:14',517,40.1),

('FB481HJ','05.12.2019','10:34','16:25',515,45.8),
('FB481HJ','03.01.2020','10:15','15:12',430,38.8),
('FB481HJ','12.01.2020','10:55','19:25',615,52.1)
;

INSERT INTO RIFORNIMENTI VALUES
('EC123CD','27.10.2019','06:15',54.0),
('EC123CD','25.11.2019','06:00',72.0),
('EC123CD','04.01.2020','07:18',35.0),
('EC123CD','07.01.2020','07:15',75.0),

('EC234EF','12.01.2020','09:18',45.0),

('FF412CG','17.11.2019','22:00',65.0),
('FF412CG','18.11.2019','12:45',35.0),
('FF412CG','12.01.2020','12:15',30.0),

('FB481HJ','05.12.2019','12:22',43.0),
('FB481HJ','03.01.2020','12:10',53.0),
('FB481HJ','12.01.2020','10:12',73.0)
;

GRANT SELECT ON FURGONI TO PUBLIC;
GRANT SELECT ON VIAGGI TO PUBLIC;
GRANT SELECT ON RIFORNIMENTI TO PUBLIC;


-- 2.1
SELECT F.Sede, DEC(AVG(KmPercorsi/LitriUsati),6,2) AS CONSUMO_MEDIO
FROM FURGONI F, VIAGGI V
WHERE F.Targa = V.Targa
AND YEAR(V.Data) =2020
AND NOT EXISTS (SELECT *
		FROM RIFORNIMENTI R
		WHERE (R.Targa,R.Data) = (V.Targa,V.Data)
		AND R.Ora BETWEEN V.OraPartenza AND V.OraArrivo )
GROUP BY F.Sede;



-- 2.2
WITH 
VIAGGI_MAX_DURATA AS (
	SELECT   *
	FROM	 VIAGGI V
	WHERE	 (V.OraArrivo-V.OraPartenza) =
		(	SELECT	MAX(V1.OraArrivo-V1.OraPartenza) 
			FROM	VIAGGI V1
			WHERE	V1.Targa = V.Targa
			AND	YEAR(V1.Data) = YEAR(V.Data)	)
	)
SELECT 	YEAR(V.Data) AS ANNO, V.Targa
FROM 	VIAGGI_MAX_DURATA V
WHERE	V.KmPercorsi/LitriUsati = 
	(	SELECT	MAX(V1.KmPercorsi/LitriUsati)
		FROM	VIAGGI_MAX_DURATA V1
		WHERE	YEAR(V1.Data) = YEAR(V.Data));




