显示最近的“x”记录符合条件的记录

时间:2013-10-24 23:05:39

标签: sql-server

这是一个简化的SQLFiddle数据示例

基本上,我希望在登录审核表中识别记录,其中每个用户的最新记录都有“x”(例如,对于此示例,为3)登录失败次数

通过执行SELECT TOP 3并按日志顺序按降序排序并评估这些记录,我能够为各个用户获取此数据,但我知道必须有更好的方法来执行此操作。

我尝试了一些使用ROW_NUMBER()的查询,按UserName和Success进行分区以及按LogDate进行排序,但我无法完全按照我想要的方式进行。基本上,每次成功登录时,我都希望重置失败的登录计数器。

1 个答案:

答案 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而不是用户名