我正在尝试对 Sql 代理进行循环查询,该代理检查用户数据,如果满足条件,则会发送奖励,之后它将从表中删除记录,重新启动循环。问题是我无法让循环工作。
我的桌子看起来像这样:
ID | login_id | price | date |
1 user1 -100 01/01/1999
我尝试过的:
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
第一个问题是它计算设定条件(多个用户)的所有记录,而不是每个用户。我所拥有的示例(它并不将其自身限制为只有 1 个用户):
ID | login_id | price | date |
1 user1 -100 01/01/1999
2 user2 -100 01/01/1999
3 user3 -100 01/01/1999
我也尝试过这个:
SELECT login_id, COUNT(login_id) AS username_count
FROM point_log_pitty
where price='-100'
GROUP BY login_id
它可以正确计算记录,但我无法使用 username_count 的结果来删除查询。
目标:看起来像这样:一旦您的用户达到 3'-100' 价格匹配查询,就会执行并选择该用户历史记录中符合条件的记录,并删除这些记录,重新启动循环。
该数据正在获取并删除。
ID | login_id | price | date |
1 user1 -100 01/01/1999
2 user1 -100 01/01/1999
3 user1 -100 01/01/1999
你第二次尝试就很接近了。您希望使用该
HAVING
子句仅保留包含 3 行或更多行的案例,并首先将其放入临时表中,然后在查询中重新加入该临时表,如下所示DELETE
: