我有一个捕获用户登录和注销时间的表(他们登录的应用程序是与 MySQL 服务器通信的 VB)。该表类似于示例:
idLoginLog | username | Time | Type |
--------------------------------------------------------
1 | pauljones | 2013-01-01 01:00:00 | 1 |
2 | mattblack | 2013-01-01 01:00:32 | 1 |
3 | jackblack | 2013-01-01 01:01:07 | 1 |
4 | mattblack | 2013-01-01 01:02:03 | 0 |
5 | pauljones | 2013-01-01 01:04:27 | 0 |
6 | sallycarr | 2013-01-01 01:06:49 | 1 |
因此,每次用户登录时,都会在表中添加一个新行,其中包含他们的用户名和时间戳。登录的类型为“1”。当他们注销时,只有类型为“0”。
有一些小问题,如果用户强制退出应用程序,他们似乎永远不会注销,因为这显然绕过了提交注销查询的过程(类型“0”)。但是请忽略这一点,并假设我找到了解决该问题的方法。
我想知道什么查询(我可能每周运行一次)来计算在任何时候登录的最多用户。这甚至可能吗?对我来说,这似乎是一个巨大的数学/SQL 挑战!该表目前有大约 30k 行。
哇!谢谢你们!我已将 mifeet 的答案改编为可以完成我需要完成的最短代码。不敢相信我可以用这段代码完成它,我想我必须蛮力或重新设计我的数据库!
set @mx := 0;
select time,(@mx := @mx + IF(type,1,-1)) as mu from log order by mu desc limit 1;