Eu tenho uma tabela de atividades que tem uma referência de chave estrangeira para uma tabela de usuários. Um usuário pode ter muitas atividades e eu tenho um trabalho que preencherá suas atividades diariamente. Depois que esse trabalho for executado, quero executar uma consulta SQL que excluirá os registros mais antigos por usuário e manterá os 10 mais recentes. Este é o esquema:
usuários
id name
1 Jimmy
2 Johnny
user_activities
id user_id activity date
1 1 foo 2020-08-07 00:00:00
2 1 bar 2020-08-08 00:00:00
3 1 baz 2020-08-09 00:00:00
4 2 foo 2020-08-07 00:00:00
5 2 bar 2020-08-08 00:00:00
6 2 baz 2020-08-09 00:00:00
Como posso escrever uma consulta para truncar registros até os 10 últimos para cada usuário?
Isso funciona com o mysql 5.xe acima
mysql tem desde a versão a função de janela ROW_NUMBER para que a subconsulta possa ser escrita sem variáveis definidas pelo usuário
Eu adicionei alguns dados para mostrar que funciona
A ideia é simples, ordene todas as datas por user_id e mantenha as 10 mais novas, o rownumber define a posição do registro ordenado por data decrescente
db<>fique aqui
Para SQL Server
3 linhas afetadas
db<>fique aqui