Estou tentando fazer uma consulta em loop para o agente Sql que verifica os dados dos usuários e se os critérios forem atendidos a recompensa é enviada, após isso excluiria os registros da tabela reiniciando o loop. O problema é que não consigo fazer o loop funcionar.
Minha mesa fica assim:
ID | login_id | price | date |
1 user1 -100 01/01/1999
O que eu tentei:
DECLARE @retVal int
SELECT @retVal = COUNT(*)
select x.login_id, x.price
FROM Table as x inner join Table as b on x.login_id=b.login_id
where x.price='-100'
order by x.login_id
IF (@retVal >= 3)
BEGIN
DELETE TOP (3) x
FROM point_log_pitty as x
inner join point_log_pitty as b on x.login_id=b.login_id
where b.login_id=x.login_id and @retVal = 3 and x.price='-100';
End
O primeiro problema é que ele conta todos os registros para condições definidas (vários usuários), não por usuário. Exemplo do que tenho (não se limita a apenas 1 usuário):
ID | login_id | price | date |
1 user1 -100 01/01/1999
2 user2 -100 01/01/1999
3 user3 -100 01/01/1999
Eu tentei este também:
SELECT login_id, COUNT(login_id) AS username_count
FROM point_log_pitty
where price='-100'
GROUP BY login_id
O que conta corretamente os registros, mas não posso usar os resultados de username_count para excluir a consulta.
Objetivo: seria mais ou menos assim: Quando seu usuário x atingir 3'-100' de correspondência de preços, a consulta será executada e selecionará os registros do histórico do usuário que correspondem aos critérios e excluirá esses registros, reiniciando o loop.
Esses dados estão sendo buscados e excluídos.
ID | login_id | price | date |
1 user1 -100 01/01/1999
2 user1 -100 01/01/1999
3 user1 -100 01/01/1999
Você estava perto em sua segunda tentativa. Você gostaria de usar a
HAVING
cláusula para manter apenas os casos com 3 ou mais linhas agrupados e jogá-los primeiro em uma tabela temporária e, em seguida, reingressar nessa tabela temporária naDELETE
consulta da seguinte forma: