繁体   English   中英

选择表中具有相同用户名的行并比较日期间隔

[英]Select rows that have same username in table and compare date interval

我有一个包含的日志表

  • 用户名
  • 切入点
  • 验证日期

我想知道哪个用户在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上连接了多次,并且间隔少于一分钟的时间很多次

您可以尝试类似

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

我认为这样会向您显示所需的最高记录

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

如果要自定义条件,只需在内部查询中进行即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM