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

Query: obtener registros con última fecha en group by

Estas en el tema de Query: obtener registros con última fecha en group by en el foro de Mysql en Foros del Web. Hola de nuevo foreros, A ver si podéis echarme una mano con esta query que ya me está saliendo humo de la cabeza... Supongamos la ...
  #1 (permalink)  
Antiguo 24/09/2010, 14:36
 
Fecha de Ingreso: agosto-2003
Ubicación: Málaga, España
Mensajes: 419
Antigüedad: 20 años, 8 meses
Puntos: 1
Query: obtener registros con última fecha en group by

Hola de nuevo foreros,

A ver si podéis echarme una mano con esta query que ya me está saliendo humo de la cabeza...

Supongamos la tabla con 4 campos: Maquina, Fecha, Hora, Datos
Se anotan registros para cada máquina (A,B,C...) con su fecha y hora de inserción.

La query que necesito debe obtener para cada máquina registrada, el último registro anotado, es decir el mayor Fecha+Hora

Lo estoy haciendo así pero no funciona, me devuelve ciertamente la mayor Fecha+Hora, pero el resto de campos no son los del registro de mayor fecha+hora

Código:
SELECT m.Maquina, MAX(ADDTIME(m.Fecha,m.Hora)) as Orden, m.Fecha, m.Hora, m.Datos
FROM `maquina` m
GROUP BY m.Maquina
Creo que es un problema típico pero no lo resuelvo...
¿Alguien puede echarme una mano?
Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 28/09/2010, 02:36
 
Fecha de Ingreso: agosto-2003
Ubicación: Málaga, España
Mensajes: 419
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Query: obtener registros con última fecha en group by

Bueno, finalmente opté por una solución, comento aquí todo por si a alguien pudiera ayudarle:

Parece que esto funciona como veiamos. Aunque creo que no debería ser así puesto que la función MAX devuelve un registro y el resto de campos deberían ser de ese registro y no uno cualquiera, pero bueno.

Finalmente lo que he hecho es:

Código:
SELECT *
FROM `maquina` m
WHERE ID IN (
SELECT MAX(ID) FROM maquina GROUP BY maquina
)
Tampoco es buena solución puesto que no se deberia usar MAX(ID) para obtener el ultimo registro sino un campo fecha, porque el campo autoincrement como sabemos se resetea llegado a su máximo.

Espero sirvan estos comentarios y un saludos a todos.
  #3 (permalink)  
Antiguo 28/09/2010, 03:25
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: Query: obtener registros con última fecha en group by

Código MySQL:
Ver original
  1.   (SELECT * FROM `maquina` ORDER BY maquina DESC)
  2. GROUP BY maquina;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 27/10/2010, 09:39
 
Fecha de Ingreso: febrero-2006
Mensajes: 22
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Query: obtener registros con última fecha en group by

Yo tengo el mismo problema, necesito que mi GROUP BY me entregue el mayor valor pero que recupere los registros de ese mayor valor.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1.   (SELECT * FROM `maquina` ORDER BY maquina DESC)
  2. GROUP BY maquina;
Probe este codigo y me arroja el siguiente error:

Every derived table must have its own alias

El que el amigo de la duda funciona ok, aunque es raro, me imagino que debe haber un SQL mas facil.
Quizas usando Having que es el where del grop by, ojala algun master de BD pueda orientarnos con una consulta más optima.

Saludos
  #5 (permalink)  
Antiguo 27/10/2010, 11:33
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: Query: obtener registros con última fecha en group by

Código MySQL:
Ver original
  1.   (SELECT * FROM `maquina` ORDER BY maquina DESC) T1
  2. GROUP BY maquina;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 27/10/2010, 12:58
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Query: obtener registros con última fecha en group by

Buenas tardes bauhaus1975

Prueba con esto, creo que te debería de servir

Código SQL:
Ver original
  1. SELECT T1.* FROM maquinas T1 INNER JOIN
  2. (
  3. SELECT maquina, MAX(ADDTIME(fecha, hora)) AS max_fecha
  4. FROM maquinas
  5. GROUP BY maquina
  6. ) T2
  7. ON T1.maquina = T2.maquina AND
  8. T1.fecha = DATE(T2.max_fecha) AND
  9. T1.hora = TIME(T2.max_fecha)

Saludos
Leo.
  #7 (permalink)  
Antiguo 18/11/2010, 02:27
 
Fecha de Ingreso: agosto-2003
Ubicación: Málaga, España
Mensajes: 419
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Query: obtener registros con última fecha en group by

Muchas gracias por vuestra ayuda gnzsoloyo y leonardo_josue.

Etiquetas: group, query, registros, fechas
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 13:45.