Consulta MYSQL, ultimo registro de una tabla

publicado por: Anonymous

tengo las siguientes dos tablas
User (Email(PK), Nombre, Rol) y Message (Id (Pk), IDSend (FK), IDDest(FK), Mensaje, Status, Fecha)

Requiero retornar el Email, el Nombre, el mensaje y el Status del último mensaje de cada usuario registrado en la base de datos. ¿Alguna idea que puedan darme?

Esto es lo que llevo

Select IDSend, MAX(Fecha) as Date, Status, Mensaje 
FROM message group by IDSend HAVING IDSend in (Select Email from user)

solución

Para hacer esto en SQL standard, hariamos lo siguiente:

Recuperamos el ultimo mensaje de cada usuario

Select IDSend, Max(Fecha)
From Message 
Group by IDSend

Ahora, usamos ese query como entrada de otro query, para poder obtener los valores de cada una de las otras tablas

Select U.Email, U.Nombre, M.Mensaje, M.Status
From (
    Select IDSend, Max(Fecha)
    From Message 
    Group by IDSend) as A
inner join User as U on U.Email = A.IDSend 
inner join Message as M on M.Fecha = A.Fecha

Lo que hacemos en este ultimo query, es una vez obtenidos los IDSend que queriamos, los volvemos a cruzar con las tablas que tienen los campos que queriamos.

Como la tabla A tiene un solo registro por usuario y es el que tiene la maxima fecha, solo va a traer esos datos.

Hay otra forma de hacer esto, y es haciendo subquerys directamente en el select. El resultado termina siendo el mismo, pero la sintaxis se ve mas compleja.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *