what's going on...? 2023-02-17 00:01 采纳率: 0%
浏览 136
已结题

SQL统计24小时重复登录

通过SQL获得如下图所示结果,计算重复登录的相关信息,登录流水系统自动生成不重复。

img


C

  • 写回答

11条回答 默认 最新

  • GISer Liu 2023-02-17 01:46
    关注

    假设T1表的结构如下:

    login_idlogin_time用户名
    12023-02-16 08:00:00用户1
    22023-02-16 09:00:00用户
    32023-02-15 23:30:00用户1
    42023-02-15 22:00:00用户3
    52023-02-15 15:00:00用户4
    62023-02-14 18:00:00用户2
    72023-02-14 12:00:00用户3

    下面是SQL代码:

    SELECT 
      T1.login_id, 
      T1.login_time, 
      T1.username
    FROM 
      T1 
      INNER JOIN (
        SELECT 
          username, 
          MAX(login_time) as latest_login_time 
        FROM 
          T1 
        GROUP BY 
          username 
      ) T2 
      ON T1.username = T2.username 
      AND T1.login_time = T2.latest_login_time 
      AND T1.login_time >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
    

    以上SQL语句通过内部查询T1表中每个用户名的最新登录时间,然后将T1表和T2表连接,以获取最近登录的所有记录,且登录时间在最近的24小时内。这个查询将返回以下结果:

    login_idlogin_time用户名
    12023-02-16 08:00:00用户1
    22023-02-16 09:00:00用户2

    接下来,我们可以使用以下SQL语句来计算24小时内的重复登录信息:

    SELECT 
      T1.username, 
      COUNT(*) AS repeat_login_count, 
      GROUP_CONCAT(DISTINCT T1.login_id SEPARATOR ',') AS repeat_login_ids 
    FROM 
      T1 
      INNER JOIN (
        SELECT 
          username, 
          MAX(login_time) as latest_login_time 
        FROM 
          T1 
        GROUP BY 
          username 
      ) T2 
      ON T1.username = T2.username 
      AND T1.login_time = T2.latest_login_time 
      AND T1.login_time >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
    GROUP BY 
      T1.username 
    HAVING 
      COUNT(*) > 1
    

    这个查询会返回在24小时内至少重复登录了一次的用户信息,其中包括用户名,重复登录次数以及登录的流水号,例如:

    用户名repeat_login_countrepeat_login_ids
    用户121,3
    用户222,6

    在这个例子中,user1和user2在最近的24小时内重复登录了2次,分别是1,3和2,6。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月21日
  • 创建了问题 2月17日