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

Agrupar por intervalos de tiempo y si no hay registro en alguno que algo aparezca.

Estas en el tema de Agrupar por intervalos de tiempo y si no hay registro en alguno que algo aparezca. en el foro de Mysql en Foros del Web. Bueno, espero no molestar a nadie, esta es la tercera pregunta sobre el tema cuando lo ideal seria que fuese una sola pero bueno, perdon ...
  #1 (permalink)  
Antiguo 04/02/2010, 20:17
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 10 meses
Puntos: 0
Agrupar por intervalos de tiempo y si no hay registro en alguno que algo aparezca.

Bueno, espero no molestar a nadie, esta es la tercera pregunta sobre el tema cuando lo ideal seria que fuese una sola pero bueno, perdon otra vez
Todo empezo cuando se me ocurrio agrupar resultados por dias algo sencillo que expuse aqui-->http://www.forosdelweb.com/f86/selec...rvalos-771936/
Buenisimo, salio bien.
Despues se me ocurrio por cada x cantidad de minutos (incluso horas) y me respondieron aqui-->http://www.forosdelweb.com/f86/busqu...a-dada-775030/
y me recomenadon leer aqui-->http://www.forosdelweb.com/f86/agrup...-puede-703525/
aunque la verdad que ese post me supero, capaz la complejidad de lo que buscaba el que lo posteo supera lo mio pero creo que se relacionan facilmente.
La idea es la siguiente, necesito hacer un grafico en base a datos de la base de datos (parece un trabalenguas).
Tengo mi tabla con fechas (hora unix en enteros) y temperaturas que provienen de una estacion. Puede ocurrir que la estacion no funcione o algo le pase y en algun lapso de tiempo no envie datos lo que produce "huecos" en la base de datos (eso por suerte no lo manejo yo).
Entonces, si yo hago la siguiente busqueda:
Código:
SELECT AVG( Temperatura ) Temperatura, Fecha
FROM `tabla`
WHERE Fecha>=1230786000
AND Fecha <1230814800

GROUP BY (
( 60 /30 ) * HOUR( FROM_UNIXTIME( Fecha ) ) + FLOOR( MINUTE( FROM_UNIXTIME( Fecha ) ) /30 )
)
puede ocurrir que en uno de los intervalos ni siquiera haya registros, le di muchas vueltas basandome en el post que me recomendaron pero sigue igual, esta vez la consulta es todos los dias del mes y construi la consulta asi:
Código:
SELECT IFNULL( AVG( Temperatura ) , 0 ) AS Temperatura, DATE_FORMAT( FROM_UNIXTIME( Fecha) , '%d-%m' ) Fecha2, IF( DATE_FORMAT( FROM_UNIXTIME( Fecha) , '%d-%m' ) = " ", 'NO HAY', 'SI HAY' ) Fechita
FROM `tabla`
WHERE FechaHora >=1243814400
AND FechaHora <1246406400
GROUP BY (
DAY( FROM_UNIXTIME( Fecha) )
)
ORDER BY Fecha
La busqueda es desde el 1/6/2009 hasta el 1/7/2009. Esta busqueda, por ejemplo, no arroja datos el 18/6 por lo tanto, no la "imprime". Como puedo hacer que la imprima y que me arroje un "no hay datos"???
Es cierto tambien que ningun dato puede ser nulo en la base de datos asi que me quede sin ideas

Perdonen la molestia.

Etiquetas: agrupar, intervalos, registro
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:20.