Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Agrupar por fechas

Estas en el tema de Agrupar por fechas en el foro de Mysql en Foros del Web. Hola buenas. Tengo una tabla con tres campos, donde se recoge la temperatura diaria de una serie de pueblos: FECHA PUEBLO TEMP 2010-01-01 1 2.5 ...
  #1 (permalink)  
Antiguo 27/09/2011, 09:26
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Agrupar por fechas

Hola buenas.

Tengo una tabla con tres campos, donde se recoge la temperatura diaria de una serie de pueblos:

FECHA PUEBLO TEMP
2010-01-01 1 2.5
2010-01-01 5 1.3
2011-01-01 3 2.0
2011-01-03 4 3.1
2010-01-03 5 1.4
... ... ...

donde TEMP es la temperatura del día que señala el campo FECHA para un PUEBLO concreto.

Mi idea es hacer una consulta que tenga por resultado lo siguiente:

FECHA TEMP2010 TEMP2011
1-enero temp temp
2-enero temp temp
... ... ...

es decir, en la columna FECHA debe aparecer las fechas ordenadas de menor a mayor, pero sin indicar el año, sólo día y mes.

TEMP2010 debe recoger la media del dato de la temperatura de la fecha señalada en la comuna anterior, pero del año 2010, para un día concreto. Por ejemplo, la media de la temperatura de todos los pueblos el día 1 de enero, 2 de enero, etc.

La idea es comparar para cada día del año, las temperaturas medias de cada año del conjunto de pueblos.

Análogo para TEMP2011.

Gracias por la ayuda.

¡Vaya lío!
  #2 (permalink)  
Antiguo 27/09/2011, 09:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Agrupar por fechas

SELECT AVG(TEMP) media, YEAR(FECHA), MONTH(FECHA) mesnumero, DAY(FECHA) diames FROM tutabla GROUP BY YEAR(FECHA), MONTH(FECHA), DAY(FECHA) order by YEAR(FECHA), MONTH(FECHA), DAY(FECHA)

Luego poner el nombre en espalol del mes y el resto de la presentación deberás hacerlo con PHP.

Última edición por jurena; 27/09/2011 a las 09:44
  #3 (permalink)  
Antiguo 27/09/2011, 10:05
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Agrupar por fechas

Gracias por tu respuesta jurena, pero tu consulta no me permite comparar para un mismo día el dato de temperatura media de 2010 y 2011, ya que lo que hace es hallar la media de todos los años y la coloca en una sola columna.

Lo que necesito es que la consulta cree dos columnas, una con la media de todos los pueblos correspondiente a 2010 y otra a 2011, además de la columna FECHA señalando sólo el día y el mes (no el año).

¡Saludos!
  #4 (permalink)  
Antiguo 27/09/2011, 10:37
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Agrupar por fechas

La verdad me puse a tirar código y no se si servirá, no lo probé ni nada.
te ayudará en algo? xD!

Código MySQL:
Ver original
  1.     DATE_FORMAT(an1.fecha,"%d-%M") AS dia_mes,
  2.     AVG(an1.temp) AS TEMP2010,
  3.     AVG(an1.temp) AS TEMP2011
  4.     (SELECT * FROM tabla WHERE YEAR(fecha) = '2010') an1
  5.     (SELECT * FROM tabla WHERE YEAR(fecha) = '2011') an2
  6.     ON DATE_FORMAT(an1.fecha,"%d-%m") = DATE_FORMAT(an2.fecha,"%d-%m")
  7. GROUP BY dia_mes
  8. ORDER BY dia_mes ASC

Insisto fue un porro del bueno ajajaja

Saludos.
  #5 (permalink)  
Antiguo 27/09/2011, 10:50
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Agrupar por fechas

Gracias Ribon, pero la consulta no da ningún resultado.

Saludos.
  #6 (permalink)  
Antiguo 27/09/2011, 11:02
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Agrupar por fechas

Quizás sea insistente pero puede ser la condición del join que me quedó mal xD!
Quisiera tener forma de hacer pruebas, tengo el interprete en la cabeza en este momento :P

Código MySQL:
Ver original
  1.     DATE_FORMAT(an1.fecha,"%d-%M") AS dia_mes,
  2.     AVG(an1.temp) AS TEMP2010,
  3.     AVG(an1.temp) AS TEMP2011
  4.     (SELECT * FROM tabla WHERE YEAR(fecha) = '2010') an1
  5.     (SELECT * FROM tabla WHERE YEAR(fecha) = '2011') an2
  6.     DATE_FORMAT(an1.fecha,"%d-%m") = DATE_FORMAT(an2.fecha,"%d-%m")
  7. GROUP BY dia_mes
  8. ORDER BY dia_mes ASC
  #7 (permalink)  
Antiguo 27/09/2011, 11:11
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Agrupar por fechas

Tampoco da ningún resultado. No da error, pero tampoco aparece nada.
  #8 (permalink)  
Antiguo 27/09/2011, 11:19
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Agrupar por fechas

Me cree mi propia tabla con datos y si me da resultados o.o
quizás puse algo que nada que ver o no se pero me enlista los días junto a los promedios de temperaturas justo como dices tu :S

EDIT: En el 3er campo era an2.fecha, puse an1 xD!

Código MySQL:
Ver original
  1.     DATE_FORMAT(an1.fecha,"%d-%M") AS dia_mes,
  2.     AVG(an1.temp) AS TEMP2010,
  3.     AVG(an2.temp) AS TEMP2011
  4.     (SELECT * FROM temperaturas WHERE YEAR(fecha) = '2010') an1
  5.     (SELECT * FROM temperaturas WHERE YEAR(fecha) = '2011') an2
  6.     DATE_FORMAT(an1.fecha,"%d-%m") = DATE_FORMAT(an2.fecha,"%d-%m")
  7. GROUP BY dia_mes
  8. ORDER BY dia_mes ASC


Última edición por Ribon; 27/09/2011 a las 11:27
  #9 (permalink)  
Antiguo 27/09/2011, 11:34
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Agrupar por fechas

Sí, eso es justo lo que quiero, pero no sé porqué a mí no me da ningún resultado.

¡Gracias!
  #10 (permalink)  
Antiguo 27/09/2011, 14:57
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Agrupar por fechas

Vaya impotencia que siento teniendo el resultado delante de mí y sin poder hacerla funcionar.

En mi phpmyadmin no me da ningún resultado, ni en mi ordenador ni en el servidor, aunque dice que la consulta se ha realizado con éxito.

¿Cuál puede ser la causa?

Saludos.
  #11 (permalink)  
Antiguo 27/09/2011, 15:20
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Agrupar por fechas

que no tengas registros en el 2010 ni el 2011 en el mismo mes xD!
que tipo de dato pusiste las fechas? yo la tabla la cree usando DATE

Saludos...
  #12 (permalink)  
Antiguo 27/09/2011, 15:32
 
Fecha de Ingreso: mayo-2004
Mensajes: 59
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Agrupar por fechas

¡Ya está todo bien, gracias!

Aunque veo que ordena el campo FECHA por orden alfabético, y no por orden cronológico.
  #13 (permalink)  
Antiguo 27/09/2011, 16:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Agrupar por fechas

Cita:
Iniciado por ismapolo Ver Mensaje
¡Ya está todo bien, gracias!

Aunque veo que ordena el campo FECHA por orden alfabético, y no por orden cronológico.
Eso es porque tienes mal definido el ORDER BY.
Usa:
Código MySQL:
Ver original
  1. ...
  2. ORDER BY YEAR(an1.fech), MONTH(an1.fecha)

Tip: Si el orden es ascendente, ponerle ASC es redundante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 27/09/2011, 23:09
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 16 años
Puntos: 1
Respuesta: Agrupar por fechas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso es porque tienes mal definido el ORDER BY.
Usa:
Código MySQL:
Ver original
  1. ...
  2. ORDER BY YEAR(an1.fech), MONTH(an1.fecha)

Tip: Si el orden es ascendente, ponerle ASC es redundante.
No sean malos pueden mostrar el contenido de las tablas para entender ya que tengo un problema similar, muchas gracias, Saludos!!!
  #15 (permalink)  
Antiguo 28/09/2011, 04:39
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 14 años, 2 meses
Puntos: 91
Respuesta: Agrupar por fechas

Vaya pues cual era el problema para que no te mostrara registros??
  #16 (permalink)  
Antiguo 28/09/2011, 04:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Agrupar por fechas

Cita:
Iniciado por gerardo_goh Ver Mensaje
No sean malos pueden mostrar el contenido de las tablas para entender ya que tengo un problema similar, muchas gracias, Saludos!!!
No entendí la observación.

Simplemente decía cómo ponerlos en el orden que los necesitas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: agrupar, campos, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:32.