我有一个包含
的日志表我想知道哪个用户在1分钟内在同一个接入点上有很多关联来查找连接问题。
我想要一个查询,在同一个接入点上测试多个相同的用户名条目,然后继续比较第一个和第二个日期间隔 当然,每个用户名可能有两个以上的条目。
实际上,我只能返回用户在同一个接入点的连接数。
更多示例:
如果我有这样的数据:
Username Access_point Authdate
ALAIN AP01 2013-11-22 05:00:01
ALAIN AP01 2013-11-22 04:50:01
ALAIN AP02 2013-11-22 03:00:01
在这个示例中,一切正常,因为ALAIN在AP01上连接了两次,但同一AP上的连接间隔是10分钟。
但是在这里:
Username Access_point Authdate
ALAIN AP01 2013-11-22 05:00:01
ALAIN AP01 2013-11-22 04:59:10
ALAIN AP01 2013-11-22 04:59:01
ALAIN AP01 2013-11-22 04:58:50
ALAIN AP01 2013-11-22 04:57:55
ALAIN AP01 2013-11-22 04:50:01
ALAIN AP02 2013-11-22 03:00:01
ALAIN在同一个AP上多次连接,间隔多次低于一分钟
答案 0 :(得分:0)
您可以尝试类似
的内容SELECT U.username FROM your_table as U where
EXISTS (
SELECT U2.username FROM your_table as U2 WHERE
U.accesspoint = U2.accesspoint AND U.username = U2.username AND
DATEDIFF (U.authdate, U2.authdate) < what_you_want
)
[编辑]
可能是以下
SELECT DISTINCT U.username
FROM table AS U
WHERE (
SELECT count( * )
FROM table AS U2
WHERE U.username = U2.username ... etc
AND (
(
datediff(U.acces, U2.access)
) < your_limit
)
) >1 #this to avoid same row to be returned twice
答案 1 :(得分:0)
我认为这样的事情会向你显示你想要的最佳记录
SELECT log_tmp.username, COUNT(log_tmp.username) as ctn
FROM (SELECT username FROM log WHERE authdate > 'XXX' AND authdate < 'YYY') AS log_tmp
GROUP BY log_tmp.username ORDER BY cnt DESC
如果您想自定义条件,只需在内部查询中执行。