2011-10-19 12 views
6

que tienen una tabla como la siguiente:efeméride y MySQL consulta

id | date 
---- | ----------- 
1 | 1319043263 
2 | 1319043578 

que datan formato del campo es de época. Tengo que agrupar cada fila que pertenece al mismo día y mostrarlas en un grupo separado. ¿Cómo puedo hacer eso en MySQL?

Gracias.

Respuesta

13

Agrupar por:

SELECT COUNT(`id`) AS `Records`, DATE(FROM_UNIXTIME(`date`)) AS `Date` 
FROM `table` 
GROUP BY DATE(FROM_UNIXTIME(`date`)) 

Salida:

Records | Date 
-------------------------------- 
     10 | 2011-10-19 
     10 | 2011-10-18 

por:

SELECT `id`, FROM_UNIXTIME(`date`) AS `Date` 
FROM `table` 
ORDER BY DATE(FROM_UNIXTIME(`date`)) [ASC|DESC] 

(Aunque en realidad se podrían obtener el mismo orden usando sólo FROM_UNIXTIME () O el date valor crudo ya todos ellos se acumulará correctamente en un intento de pedido)

Salida:

 id | Date 
-------------------------------- 
     03 | 2011-10-19 12:00:00 
     02 | 2011-10-18 12:00:00 
     01 | 2011-10-17 12:00:00 

Esto convierte la marca de tiempo Unix en una fecha y hora de MySQL y luego se extrae el valor de la fecha de la que se aplica a la agrupación o el orden cláusula

Si desea agrupar por día, independientemente del mes y año de uso DÍA() en lugar de la fecha()

sin embargo se puede ampliar en la parte de "grupo de cada fila por día" . ¿Qué resultado quieres mostrar? cuando agrupa algo utiliza un tipo de procesador agregado como COUNT() o SUM() en un campo dentro del grupo.

MySQL Group Functions Reference

MySQL Date & Time Function Reference

+0

Quiero agrupar cada fila que pertenece al mismo día que es única. – silvercover

+0

Ok, estás buscando una cláusula ORDER BY luego – JoshHetland

+0

Lo siento, supongo que no entiendo, ¿podrías agregar un ejemplo del resultado que quieres? – JoshHetland

1

Creo que es algo así como que, teniendo en cuenta el requisito de la agrupación.

Acabo de agregar MIN/MAX como ejemplo para la agregación de dominios.

SELECT 
    DATE(FROM_UNIXTIME(`epoch`)) AS `GroupedDate`, 
    MIN(FROM_UNIXTIME(`epoch`)) AS `DayStart`, 
    MAX(FROM_UNIXTIME(`epoch`)) AS `DayEnd` 
FROM 
    `timestamps` 
GROUP BY 
    DATE(FROM_UNIXTIME(`epoch`)) 
ORDER BY 
    `epoch` ASC;