Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Grupo MySQL por ID e última data


Eu acho que com o abaixo você pode conseguir o que precisa, essas operações são chamadas de "Group-wise Maximum".

Opção 1

Este é o mais fácil de entender, uma subconsulta retornará o máximo de TID para todos os usuários desde o max é usado junto com Group By e então fazemos uma outra consulta para obter todos os dados para esses IDs.
 Select TID, TData, TUserID, TViewedAt
 From Test 
 Where TID In(
    Select Max(TID)
    From Test
    Group By TUserID
)

Opção 2

Um pouco mais complexo de entender, mas provavelmente mais eficiente. Isso funciona com base em que quando t1.TViewedAt está em seu valor máximo, não há t2.TViewedAt com um valor maior e os valores das linhas t2 serão 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