Buenos días.
Tengo que hacer una práctica en la que diseñe e implemente una base de datos para una compañía telefónica, con MySQL. Tengo, entre otras, las siguientes tablas:
CREATE TABLE Ticket (
idTicket integer(11) AUTO_INCREMENT,
NTelefono integer(9),
NDestino integer(9),
Tipo char(1),
Cantidad integer,
Fecha timestamp,
PRIMARY KEY (idTicket),
FOREIGN KEY (NTelefono) REFERENCES Linea(Ntelefono)
);
CREATE TABLE Factura (
NTelefono integer(9),
FechaFacturacion date,
ImporteTotal float(4,4),
PRIMARY KEY (NTelefono, FechaFacturacion),
FOREIGN KEY (NTelefono) REFERENCES Linea(NTelefono)
);
Pues bien, entre otras consultas, quería hacer una que fuera ver en qué hora concreta hay más actividad global, que vienen a ser los tickets (un ticket es cada acción tarificable realizada por una línea, bien sea llamar, enviar un mensaje o navegar). He hecho la siguiente consulta, y funciona, pero es redundante, por lo que os pido ayuda a ver si me la podéis arreglar >_<.
SELECT Hora FROM (SELECT COUNT(*) AS Actividad,HOUR(Fecha) AS Hora FROM Ticket GROUP BY Hora) T WHERE Actividad=(SELECT MAX(Actividad) FROM (SELECT COUNT(*) AS Actividad,HOUR(Fecha) AS Hora FROM Ticket GROUP BY Hora) T2 ) ;
También quería hacer otra consulta que me devolviera el mes con el consumo más alto (tomando los datos, de nuevo, de todos los años). Tengo la siguiente consulta, pero no sé cómo hacer para que sólo me devuelva Mes sin volver a anidar otro SELECT:
SELECT MAX(Consumo),Mes FROM (SELECT SUM(ImporteTotal) AS Consumo,MONTH(FechaFacturacion) AS Mes FROM Factura GROUP BY Mes) T;
Si se os ocurre alguna otra consulta que pueda ser interesante, la recibiré con los brazos abiertos
. ¡Muchas gracias!