sql >> Base de Datos >  >> RDS >> Mysql

Grupo MySQL por ID y última fecha y hora

Creo que con lo siguiente puede lograr lo que necesita. Estas operaciones se denominan "Máximo por grupo".

Opción 1

Este es el más fácil de entender, una subconsulta devolverá el máximo TID para todos los usuarios desde el max se usa junto con Group By y luego hacemos otra consulta para obtener todos los datos de esos ID.

 Select TID, TData, TUserID, TViewedAt
 From Test 
 Where TID In(
    Select Max(TID)
    From Test
    Group By TUserID
)

Opción 2

Ligeramente más complejo de entender, pero probablemente más eficiente. Esto funciona sobre la base de que cuando t1.TViewedAt está en su valor máximo, no hay t2.TViewedAt con un valor mayor y los valores de las filas t2 serán NULL .

SELECT t1.TID, t1.TData, t1.TUserID, t1.TViewedAt
FROM Test t1
LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAt
WHERE t2.TUserID IS NULL;

Resultado

TID TData   TUserID   TViewedAt
4   test3   123       2012-10-05 00:00:00.000
5   test2   213       2012-10-03 00:00:00.000