1

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

基本上,我正在寻找登录审核表中的记录,其中每个用户的最新记录都有“x”(对于这个例子,假设为 3)失败登录的次数

我可以通过执行 SELECT TOP 3 并按日志日期降序排序并评估这些记录来获取个人用户的这些数据,但我知道必须有更好的方法来做到这一点。

我已经尝试了一些使用 ROW_NUMBER() 的查询,按 UserName 和 Success 分区以及按 LogDate 排序,但我不能完全按照我的意愿去做。本质上,每次成功登录时,我都希望重置失败的登录计数器。

4

1 回答 1

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

于 2013-10-24T23:27:25.500 回答