这是一个简化的SQLFiddle数据示例
基本上,我希望在登录审核表中识别记录,其中每个用户的最新记录都有“x”(例如,对于此示例,为3)登录失败次数
通过执行SELECT TOP 3并按日志顺序按降序排序并评估这些记录,我能够为各个用户获取此数据,但我知道必须有更好的方法来执行此操作。
我尝试了一些使用ROW_NUMBER()的查询,按UserName和Success进行分区以及按LogDate进行排序,但我无法完全按照我想要的方式进行。基本上,每次成功登录时,我都希望重置失败的登录计数器。
答案 0 :(得分:0)
试试这段代码:
select * from (
select distinct a.UserName,
(select sum(cast(Success as int)) from (
SELECT TOP 3 Success --- here 3, change it to your number
FROM tbl as b
WHERE b.UserName=a.UserName
ORDER BY LogDate DESC
) as q
having count(*) >= 3 --- this string need to remove users who made less then 3 attempts
) as cnts
from tbl as a
) as q2
where q2.cnts=0
它显示所有最近3次尝试失败的用户,通过不同的修改,您可以使用此方法来确定在最后N行中完成的成功/失败尝试次数
注意:此查询有效,但它不是最佳方式,from tbl as a
应更改为仅存储用户的表,因此您也可以删除distinct
- 在tbl中存储用户ID而不是用户名