谁家有个大人 2025-03-23 16:13 采纳率: 100%
浏览 13
已结题

SQL查询用户连续登录问题

img


下面是我的回答,显示不正确,有没有懂得sql的帮忙看看,谢谢!

img

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-03-23 19:02
    关注
    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供,如果还有疑问可以点击头像关注私信或评论
    如果答案让您满意,请采纳、关注,非常感谢!

    要解决SQL查询用户连续登录的问题,通常需要分析用户的登录记录,并找出连续登录的天数。假设你有一个表 user_login,其中包含以下字段:

    • user_id: 用户ID
    • login_date: 登录日期

    问题分析

    我们需要找出每个用户连续登录的天数。连续登录的定义是用户在连续的几天内都有登录记录。

    解决方案

    我们可以使用窗口函数和日期函数来实现这个需求。以下是一个可能的SQL查询:

    WITH UserLogin AS (
        SELECT 
            user_id, 
            login_date,
            ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rn
        FROM 
            user_login
    ),
    LoginGap AS (
        SELECT 
            user_id, 
            login_date,
            DATE_SUB(login_date, INTERVAL rn DAY) AS grp
        FROM 
            UserLogin
    )
    SELECT 
        user_id, 
        MIN(login_date) AS start_date,
        MAX(login_date) AS end_date,
        COUNT(*) AS consecutive_days
    FROM 
        LoginGap
    GROUP BY 
        user_id, grp
    ORDER BY 
        user_id, start_date;
    

    解释

    1. UserLogin CTE:

      • 使用 ROW_NUMBER() 窗口函数为每个用户的登录记录分配一个行号 (rn),按登录日期排序。
    2. LoginGap CTE:

      • 通过 DATE_SUB(login_date, INTERVAL rn DAY) 计算一个分组标识符 (grp),这个标识符可以帮助我们识别连续的登录日期。
    3. 最终查询:

      • user_idgrp 分组,计算每个连续登录段的开始日期 (start_date)、结束日期 (end_date) 和连续登录天数 (consecutive_days)。

    示例

    假设 user_login 表中有以下数据:

    user_idlogin_date
    12023-10-01
    12023-10-02
    12023-10-03
    12023-10-05
    22023-10-01
    22023-10-02

    查询结果将会是:

    user_idstart_dateend_dateconsecutive_days
    12023-10-012023-10-033
    12023-10-052023-10-051
    22023-10-012023-10-022

    这个查询可以帮助你找出每个用户的连续登录天数。如果有任何问题或需要进一步的解释,请告诉我!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月23日