DROP TABLE TELEFONI;
DROP TABLE CHIAMATE;


CREATE TABLE TELEFONI (
	NUMERO CHAR(10) NOT NULL PRIMARY KEY,
	CLIENTE VARCHAR(30) NOT NULL,
	SALDO DEC(6,2) NOT NULL CHECK (SALDO > 0)   );

CREATE TABLE CHIAMATE (
	DANUMERO CHAR(10) NOT NULL REFERENCES TELEFONI,
	ANUMERO CHAR(10) NOT NULL REFERENCES TELEFONI,
	INIZIO TIMESTAMP NOT NULL,
	DURATA INT NOT NULL CHECK (DURATA > 0),
	COSTO DEC(6,2) NOT NULL CHECK (COSTO > 0),
	PRIMARY KEY (DANUMERO,INIZIO),
	CHECK (DANUMERO <> ANUMERO)		);


INSERT INTO TELEFONI VALUES
('1234567890','Rossi',50),
('1232222222','Rossi',20),
('1235555566','Rossi',40),

('2341231231','Bianchi',22.50),
('2343453124','Bianchi',15),

('3333333333','Verdi',45.26),
('3334444444','Verdi',10)
;


INSERT INTO CHIAMATE VALUES
('1234567890','2341231231','2013-01-31-17.45.21',15,0.15),
('1234567890','1232222222','2013-01-31-18.15.05',100,0.85),
('1234567890','1235555566','2013-02-21-14.11.15',65,1.05),

('1232222222','1234567890','2013-02-21-16.01.12',84,0.75),
('1232222222','3334444444','2013-02-21-21.05.17',74,0.53),

('1235555566','2341231231','2013-02-19-08.15.12',123,1.52),

('2341231231','2343453124','2013-02-20-18.25.02',105,1.32),
('2341231231','2343453124','2013-02-21-12.15.12',104,1.51),

('3333333333','1234567890','2013-02-18-10.08.42',106,1.85)

;

-- 2.1 --
SELECT TDA.CLIENTE
FROM TELEFONI TDA, TELEFONI TA, CHIAMATE C
WHERE C.DANUMERO = TDA.NUMERO
AND   C.ANUMERO  = TA.NUMERO
AND   TDA.CLIENTE = TA.CLIENTE
GROUP BY TDA.CLIENTE
HAVING COUNT(*) >= 3;

-- 2.2 --

WITH FASCE(FASCIA,NUMERO,NUMCHIAMATE,TOTCOSTO) AS (
SELECT 30*(C.DURATA/30), C.DANUMERO, COUNT(*),SUM(COSTO)
FROM CHIAMATE C
GROUP BY C.DANUMERO, C.DURATA/30)

SELECT F1.FASCIA,F1.TOTCOSTO,T.*
FROM FASCE F1,TELEFONI T
WHERE F1.NUMERO = T.NUMERO
AND   F1.NUMCHIAMATE = (SELECT MAX(F2.NUMCHIAMATE)
			FROM FASCE F2
			WHERE F2.FASCIA = F1.FASCIA)
ORDER BY F1.FASCIA;