Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/06/2013, 20:58
Gedeon
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 20 años, 9 meses
Puntos: 3
Respuesta: Consulta con distinct y order by

¿como que la segunda y tercera no ordenan por fecha?


Lo que tu buscas es obtener el último de cada usuario. El ultimo lo obtienes con la función max(fecha) que te devuelve la fecha mas alta. Por tanto si haces una select que devuelva el max del usuario X te devuelve el último del usuario X. Si aplicas eso a todos ya tienes una select que te devuelve el ultimo de cada uno.
Código MySQL:
Ver original
  1. select C.usuario,C.comentario from comentarios C
  2. group by C.usuario
  3. having fecha=
  4.    select max(fecha) from comentario where usuario=C.usuario
Creo que esto funcionará y si no será algo parecido. Mucha gente tiene problemas con el having.

La idea básica es que en una select primero seleccionas registros. Luego puede ir una claúsula where que EXCLUYE registros de la selección. De lo que queda hay una claúsula group que agrupa los datos obtenidos y realiza el cálculo correspondiente si lo hay y por último la claúsula having que EXCLUYE de estos resultados lo que no cumpla la condición del having. Despues de todo esto tienes la posibilidad de ORDENAR con un order by.

En el caso presente pongo un alias C a la tabla comentarios y hago una select de todos los usuarios. Al agrupar por usuario me quedará cada usuario con todos sus comentarios. En el having excluyo de cada grupo aquellos que no cumplan la condición de que la fecha tiene que ser la mayor. De esta forma solo quedsrá uno de cada grupo con la fecha mayor en cada caso. Es poco ortodoxo porque he utilizado una alias para poder subpreguntar a una tabla sobre si misma, pero creo que funcionará.

Última edición por gnzsoloyo; 05/06/2013 a las 19:20