2010-11-27 38 views
5

Tengo una tabla que tiene este aspectogrupo Mysql DateTime por 15 minutos

CREATE TABLE `time_table` (
`id` INT(10) NOT NULL AUTO_INCREMENT, 
`creationDate` DATETIME NOT NULL, 
PRIMARY KEY (`id`) 
) 

básicamente almacenar el tiempo de creación de ciertos registros de la tabla. Sé que si quiero obtener un recuento de los registros que se crearon en 15 minutos de intervalo voy a utilizar algo como esto

SELECT FLOOR(UNIX_TIMESTAMP(creationDate)/900) AS t, 
COUNT(*) FROM time_table 
GROUP BY t 

Eso me da algo como esto

t   COUNT(*) 
1434187 1 
1434188 3 
1434189 2 
1434190 2 

Cómo tengo sentido de la primera columna? Si yo quiero que me muestre algo así como

t     COUNT(*) 
2:00pm - 2:15pm 1 
2:15pm - 2:30pm 3 
2:30pm - 2:45pm 2 
2:45pm - 3:00pm 2 

entiendo que con un poco de manipulación que podría conseguir 1.434.187 a aparecer a las 2:15 pm. Incluso eso podría ser un buen comienzo ... luego, con un poco de lógica, podría mostrar todo el período. ¡Gracias!

Respuesta

7

Una forma es utilizar sólo > y < con el fin de conseguir todo dentro de un rango, pero es posible que esto sea más sencillo:

SELECT ... 

GROUP BY (4 * HOUR(thistime) + FLOOR(MINUTE(thistime)/15)) 

de http://forums.mysql.com/read.php?10,202789,202807

+1

+1 para la solución simple y limpio, pero algo va mal aquí, el recuento no es correcta ... (en el selecto ...) y sólo funciona durante 24 horas ... – Dani

+0

@Dani - ¿Cómo se ve tu cláusula 'where'? –

7

Aquí está la solución I uso:

SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(creationDate)/900) * 900) AS t, COUNT(*) FROM time_table GROUP BY t 

Aunque llega 4 años después, espero que sea útil para alguien.

5

La respuesta 2 solo funciona durante 24 horas; pruebe esta;

SELECT ... 

GROUP BY year(date),month(date),day(date),(4 * HOUR(date) + FLOOR(MINUTE(date)/15))