我有一个表单中的事件表:
| User | Event | Date |
| User A | Failed Log In | ... |
| User A | Failed Log In | ... |
| User B | Failed Log In | |
| User A | Successful Log In | |
| User B | Successful Log In | |
我想做的是计算每个用户自上次“成功登录”以来 的所有“失败登录”,以便我可以创建以下形式的 View :
| User | Failed Log in attempts |
| User A | 2 |
| User B | 1 |
这可以用 SQL 实现吗?或者我是否需要将此逻辑提取到我的应用程序中?
最佳答案
SQL 表表示无序 集,因此除非列指定顺序,否则没有“最后”或“之前”。因此,这个答案假定某种包含该信息的 eventdatetime
列,尽管自动递增的 id
也同样有效(甚至可能更好)。
我认为这可以满足您的需求:
select e.user, count(*) as NumFailedAttempts
from events e
where e.event = 'Failed Log In' and
e.eventdatetime > (select max(e2.eventdatetime)
from events e2
where e2.user = e.user and e2.event = 'Successful Log In'
);
如果你想包括零(没有失败登录的那些),那么你可以将其左连接到用户表。
关于MYSQL 计数行直到最后一个不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35670647/