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

Consulta posible?

Estas en el tema de Consulta posible? en el foro de Mysql en Foros del Web. Hola a todos Tengo una tabla ingreso con campos: id_ingreso, rut, id_lab, fecha_hora Necesito saber si es posible realizar una consulta que arroje las horas ...
  #1 (permalink)  
Antiguo 07/01/2012, 13:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
Consulta posible?

Hola a todos
Tengo una tabla ingreso con campos: id_ingreso, rut, id_lab, fecha_hora
Necesito saber si es posible realizar una consulta que arroje las horas donde mas hubo ingresos. La verdad a mi hasta el momento no se me ha ocurrido ni una idea de como realizarla...
gracias de antemano
saludos
  #2 (permalink)  
Antiguo 07/01/2012, 15:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta posible?

Si ya tienes guardado en el registro la fecha y hora, como se vé, lo único que tienes que hacer es un GROUP BY sobre la hora. Nada más.
Para poder pasarte la sintaxis sería mejor que nos dijeses qué DBMS usas, porque algunas cosas pueden variar entre ellos, y obtener la hora es una.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/01/2012, 16:03
 
Fecha de Ingreso: septiembre-2008
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Consulta posible?

Utilizo MySQL (PHPMyAdmin) y PHP
Gracias por tu respuesta...
  #4 (permalink)  
Antiguo 07/01/2012, 17:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta posible?

Bueno, es bastante simple: Como la columna fecha_hora se supone que contiene tanto la fecha como la hora del ingreso, la respuesta es agrupar por esa columna, como te dije, pero aplicando la función HOUR() sobre ese dato:
Código MySQL:
Ver original
  1.     id_lab, HOUR(fecha_hora) Hora_Ingreso, COUNT(*) Cantidad_ingresos
  2. FROM tabla
  3. GROUP BY Hora_ingreso;
Esto devuelve el resultado agrupado por horas, en función del primer registro encontrado con cada hora distinta. Para ordenarlos de mayor a menor habría que ordenar además por Cantidad_ingresos:

Código MySQL:
Ver original
  1.     id_lab, HOUR(fecha_hora) Hora_Ingreso, COUNT(*) Cantidad_ingresos
  2. FROM tabla
  3. GROUP BY Hora_ingreso
  4. ORDER BY Cantidad_ingresos DESC;
Ahora bien, si sólo quieres la hora mayor, necesitaríamos usar LIMIT para que nos devuelva sólo el primer resultado. Eso es evidente.
Pero hay un problema: el LIMIT usado en una consulta con GROUP BY no necesariamente devuelve el resultado esperado porque su implementación tiene algunos detalles que son complejos de explicar. Lo que hace es leer, agrupar, aplicar el límite y luego ordenar, lo que causará que si el mayor no está en el limite encontrado, el ordenamiento de mayor a menor sea erroneo porque suprimirá registros que necesitas.
Esto puede parecer raro, pero hay razones por las cuales la lógica usada en la implementación sea esa. No vienen al caso.
Como sea, lo mejor para resolver el problema es hacer que toda esta consulta se transforme en subconsulta, y usar el LIMIT en la exterior:
Código MySQL:
Ver original
  1.     id_lab, Hora_Ingreso, Cantidad_ingresos
  2.     (SELECT
  3.         id_lab, HOUR(fecha_hora) Hora_Ingreso, COUNT(*) Cantidad_ingresos
  4.     FROM tabla
  5.     GROUP BY Hora_ingreso) T1
  6. ORDER BY Cantidad_ingresos DESC

Eso debería funcionar.
__________________
¿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: 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 09:02.