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

¡Desesperado! Ayuda con una consulta de MySql.

Estas en el tema de ¡Desesperado! Ayuda con una consulta de MySql. en el foro de Mysql en Foros del Web. Hola, Tengo la siguiente tabla (MySql): Código: id1 id_usuario fecha 1 100 2008-01-24 2 100 2008-01-25 Luego realizo la siguiente consulta: SELECT * FROM `tabla` ...
  #1 (permalink)  
Antiguo 26/01/2008, 05:36
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 22 años, 1 mes
Puntos: 0
Pregunta ¡Desesperado! Ayuda con una consulta de MySql.

Hola,

Tengo la siguiente tabla (MySql):

Código:
id1 	id_usuario 	fecha
1          100       2008-01-24
2          100       2008-01-25
Luego realizo la siguiente consulta:
SELECT * FROM `tabla` WHERE id_usuario=100 GROUP BY id_usuario ORDER BY fecha DESC

...Y obtengo el siguiente resultado:
Código:
id1 	id_usuario 	fecha
1           100      2008-01-24
Pero yo, al poner ORDER BY fecha DESC, esperaba obtener obtener: 2 | 100 | 2008-01-25

¿Alguien sabe como podría arreglar la consulta para obtener la fila con la fecha más alta?
Por favor, echarme una mano que ayer me pegué un montón de horas intentando buscar la solución y estoy desesperado.
  #2 (permalink)  
Antiguo 26/01/2008, 06:40
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 4 meses
Puntos: 24
Re: ¡Desesperado! Ayuda con una consulta de MySql.

¿ Quieres obtener el primer registro que cumpla la condicion o N ?
Para 1 registro prueba con "rownum=1"
Y por cierto no necesitas el "group by id_usuario" ya que el campo "id_usario" se está usando con el "where".
__________________
Grupos de Música
Pop Music Stars
  #3 (permalink)  
Antiguo 26/01/2008, 09:19
Avatar de m4xp0wer  
Fecha de Ingreso: septiembre-2007
Mensajes: 66
Antigüedad: 16 años, 7 meses
Puntos: 1
Re: ¡Desesperado! Ayuda con una consulta de MySql.

Sino puedes probar a poner SELECT id1,id_usuario,max(fecha) FROM `tabla` WHERE id_usuario=100 GROUP BY id_usuario, aunque no entiendo muy bien para que haces el group by...
  #4 (permalink)  
Antiguo 26/01/2008, 11:17
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
Re: ¡Desesperado! Ayuda con una consulta de MySql.

Estás agrupando primero y ordenando después. Prueba hacerlo al revés:
Cita:
SELECT *
FROM `tabla`
WHERE id_usuario=100
ORDER BY fecha DESC
GROUP BY id_usuario
O mejor aún, agrupa una subconsulta. es más eficiente:

Cita:
SELECT *
FROM (SELECT * FROM `tabla` WHERE id_usuario=100 ORDER BY fecha DESC) AS TABLA1
GROUP BY id_usuario
  #5 (permalink)  
Antiguo 27/01/2008, 13:11
 
Fecha de Ingreso: enero-2008
Mensajes: 8
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: ¡Desesperado! Ayuda con una consulta de MySql.

Si quieres modificar la salida de una agrupación es más sencillo utilizar "having":

SELECT * FROM `tabla` WHERE id_usuario=100 GROUP BY id_usuario HAVING max(fecha) ;

Sobre las soluciones que comenta gnzsoloyo:

El ordenar y agrupar después, ¿no te fallaría?.

La subconsulta puede obligar a Mysql a utilizar tablas temporales, no lo veo claro como solución sin tener más datos.
  #6 (permalink)  
Antiguo 27/01/2008, 15: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: 16 años, 4 meses
Puntos: 2658
Re: ¡Desesperado! Ayuda con una consulta de MySql.

La suconsulta que describo en el segundo caso hace, en realidad, que la salida de la primera opere como tabla de lectura, pero como ya está leída y almacenada en el buffer de consultas, la salida es más rápida.
Además, la operación que mayor tiempo insume es SIEMPRE el ordenamiento, y en segundo puesto el HAVING. Como el ordenamiento se hace en la medida que se barre la tabla, el overheld de la lectura del disco en la segunda es inexistente.
Una consulta de ese tipo me permitió reducir el tiempo de un resumen que abarcaba 1.400.000 registros en un 80%, sin necesidad de crear índices ni tablas temporales.
Estos temas (optimización de consulta) se pueden ver someramente en páginas dedicadas al tema:

http://www.devshed.com/c/a/MySQL/MyS...zation-part-1/

http://www.databasejournal.com/featu...le.php/1382791
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 01:38.