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

Agrupar consulta de fechas por horas

Estas en el tema de Agrupar consulta de fechas por horas en el foro de Mysql en Foros del Web. Buenas. Este es mi primer mensaje en el foro de sql. Normalmente resuelvo todas mis dudas buscando, pero por más que lo he hecho, tanto ...
  #1 (permalink)  
Antiguo 24/07/2015, 02:50
 
Fecha de Ingreso: julio-2015
Ubicación: Madrid
Mensajes: 17
Antigüedad: 9 años, 5 meses
Puntos: 0
Agrupar consulta de fechas por horas

Buenas.

Este es mi primer mensaje en el foro de sql.
Normalmente resuelvo todas mis dudas buscando, pero por más que lo he hecho, tanto aquí como en Google, no encuentro solución a mi problema. Hay consultas similares, pero no lo suficiente como para hallar una solución por mi mismo.

Bien, antes de nada explicaré el contexto:
Tengo una base de datos en MySQL que registra el consumo de cada habitación en un hotel.
En una tabla guardo la fecha y hora en la que una habitación es ocupada y la fecha y hora en la que es desalojada, así como una referencia a la planta en la que está.
Cada vez que un cliente se va tengo que hacer cálculos de cada hora que ha estado, pero sólo tengo acceso al consumo total de la planta, por lo que tengo que dividirlo por el número de estancias ocupadas en el tramo de esa hora.
Es decir, que tengo que hallar y agrupar por hora el número de habitaciones que tengan una fecha de entrada anterior a la hora del cálculo (ya están ocupadas), y una fecha de salida igual a null (todavía no se han ido) o posterior a la hora del cálculo (ya se han ido pero seguían en la hora del cálculo).

Hasta ahora, como no se me ha ocurrido cómo hacerlo, hago una petición a la base de datos por cada hora de cálculo, dentro de un for en PHP, pero no me parece lo más óptimo, ya que se han llegado a hacer hasta 100 iteraciones.
Esta es la consulta que tenía:
Código MySQL:
Ver original
  1. select count(cod_ocup)
  2.     from t_ocupaciones o, t_habitaciones h
  3.     where h.cod_hab = o.cod_hab && substring(h.nombre_hab, 1, 1) = "'.$planta.'"
  4.     && (o.f_out_real is null || o.f_out_real >= "'.$dato->date.'")
  5.     && o.f_in <= "'.$dato->date.'";'
Necesario saber sobre esta consulta:
- El nombre de la habitación está formado por tres caracteres: el número de planta y dos dígitos alfanuméricos. Por eso hago un substring que coje el primer caracter.
- La variable $dato->date guarda una fecha y una hora con el mismo formato que el DATETIME de los campos f_in y f_out_real.

Por ahora funciona pero, como he dicho, no me parece lo más óptimo, de modo que me gustaría saber una forma de sacar el mismo resultado con las mínimas consultas posibles.

Es decir, lo que necesito es conocer el número de estancias ocupadas cada hora desde una fecha+hora concretas hasta otra fecha+hora concretas, que son las de entrada y salida de algún huésped.

Gracias y un saludo.

Etiquetas: group-by, mysql+consulta
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 00:48.