[eside-ghost] problema con consulta SQL

Alfredo Beaumont alfredo.beaumont en gmail.com
Jue Feb 14 17:34:42 CET 2008


Aquí tienes otra propuesta, por si quieres ordenarlos por fecha del
último evento en lugar de usuario (se podría hacer de forma similar
con joins):

SELECT nombre, hora from (SELECT usuarios.nombre AS nombre,
eventos.hora AS hora FROM usuarios, eventos WHERE eventos.id_usuario =
usuarios.id ORDER BY eventos.hora DESC) AS usuarios_eventos GROUP BY
nombre;

Saludos

2008/2/14, halls <frikihalls a bildua gmail.com>:
> wop!
>
> El día 14/02/08, Yuki (aka Rubén Gómez) <rugoli a bildua gmail.com> escribió:
> >
> > Si no me he liado no hace falta que pongas el group by ni el max
> > (porque siempre puede haber un evento de ayer que sea más que hoy,
> > ayer el último evento fue a las 12:20, pero hoy a las 10:14):
> >
> > SELECT usuarios.nombre, eventos.hora FROM eventos, usuarios WHERE
> > usuarios.id = eventos.id_usuario.
>
>
> no he entendido bien tu logica, pero esa consulta me muestra TODAS las
> entradas de eventos, eso si haciendo corresponder nombre y evento... pero
> necesito el ultimo... Por eso hacia el MAX, y el GROUP BY no tengo muy
> claro, pero supongo ke es para hacer el maximo de cada grupito
>
> Así, debería mostrar el último evento que aparece en la tabla eventos
> > (por lo menos haciendo una prueba en mi postgresql me aparece la
> > última línea de la tabla eventos).
> >
> > De todas maneras, si la hora fuese un datetime (hora y fecha), sería
> > más fácil, ya que podrías añadir a la select algo como "order by hora
> > DESC limit 1".
> >
> > Quizá lo haya entendido mal, pero creo que te has liado demasiado con
> > el group by.
>
>
> yo creo que lo que dices es asumiendo que el select solo iba a coger un
> registro de cada caso, o sino no entiendo nada XD
>
> En cualquier caso Purrio me acaba de solucionar la vida. Al final la
> sentencia se ha quedado asi:
>
> SELECT usuarios.id, usuarios.nombre, MAX(eventos.hora) FROM usuarios INNER
> JOIN eventos ON usuarios.id = eventos.id_usuario GROUP BY usuarios.id,
> usuarios.nombre
>
> parece ser que al GROUP BY hay que especificarle cada campo de "usuarios"
> que vayas a mostrar para que no te chille...
>
> en fin, una mañana perdida XD pero al menos ahora se un poquito mas.
>
> Eskerrik asko! :-)
>


Más información sobre la lista de distribución eside-ghost