lunes, 28 de noviembre de 2011

Consulta Mysql para agrupar por fechas y funciones de fecha.

Llevo tiempo sin escribir en el blog, por el trabajo. Pero voy a aprovechar estos dias para escribir un poco sobre algunas cosas que e aprendido trabajando, que me han sido de utilidad y por lo general en Internet no hay documentación en español.



Este primer post voy a hablar de como se hace en mysql para agrupar fechas por días, mes, año, minuto hora, etc.  Además de algunas funciones útiles de mysql:

Cuando hacemos un GROUP BY de un campo datetime, timestamp, date o time. Por defecto el va agrupar por supuesto por valores iguales. El problema es que para que dos datetime sean iguales tienen que tener el día y la hora exacta, lo cual no es muy común que esto ocurra. Entonces para ello sql acepta que apliquemos funciones para hacer los GROUP BY, es decir, que para lograr lo anterior solo tenemos que agregar una función que nos de el mes la hora o lo que queramos para poder hacer la agrupación.

Funciones de fecha que nos pueden servir:

EXTRACT( Unidad de una fecha)

Esta funcion extrae de una fecha lo que nosotros le pidamos(esta es la más recomendada por el rendimiento, un ejemplo seria:


SELECT EXTRACT(YEAR FROM '2009-07-02');

Aqui les dejo una lista con todos los valores posibles


unit ValueExpected expr FormatVersion
MICROSECONDMicrosegundos4.1.1
SECONDSegundosPre-4.1
MINUTEMinutosPre-4.1
HOURHorasPre-4.1
DAYDiasPre-4.1
WEEKSemana5.0.0
MONTHMesesPre-4.1
QUARTERQUARTERS5.0.0
YEARAñosPre-4.1
SECOND_MICROSECOND'Segundos.Microsegundos'4.1.1
MINUTE_MICROSECOND'Minutos:Segundos.Microsegundos'4.1.1
MINUTE_SECOND'Minutos:Segundos'4.1.1
HOUR_MICROSECOND'Horas:Minutos:Segundos.Microsegundos'4.1.1
HOUR_SECOND'Horas:Minutos:Segundos'4.1.1
HOUR_MINUTE'Horas:Minutos'Pre-4.1
DAY_MICROSECOND'Dias Horas:Minutos:Segundos.Microsegundos'4.1.1
DAY_SECOND'Dias Horas:Minutos:Segundos'Pre-4.1
DAY_MINUTE'Dias Horas:Minutos'Pre-4.1
DAY_HOUR'Dias Horas'Pre-4.1
YEAR_MONTH'Años-Meses'Pre-4.1


DATE_FORMAT(date,format)


Esta función devuelve la fecha con un formato especifico acorde al formato de la cadena formato, esta funcion es muy util para mostrar la fecha con un formato especifico, lo más recomendable es hacer el GROUP con la función anteriror y formatearla con esta. en el caso de que queramos un formato más complejo.

Tambien estan otras funciones como DATE, MONTH, YEAR, etc. que extraen partes más especificas de la fecha, para consultar todas las unfiones disponibles pueden entrar aqui:
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html


No hay comentarios:

Publicar un comentario