SQL面試題---查詢最長連續登錄天數


給定Log表,查詢各用戶最長連續登錄天數。

     `Log`   
     +----------------+---------+     
     | user_id        | int     |     
     | login_time     | date    |       
     +----------------+---------+

 

解題思路:1,給各用戶的登錄日期組內排序。用窗口函數ROW_NUMBER實現。

                  2,因為row_number是連續的,所以如果login_time-row_number是恆定的,說明用戶從該login_time算起是連續登錄的。

                  3,計算各用戶login_time-row_number這個差值的數量,也就是各用戶的連續登錄天數。

                  4,按用戶id聚合,找出各用戶最大的連續登錄天數。

 

 答案:

WITH day_rank AS (
    SELECT user_id, 
           login_time, 
           ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_time) AS rank
    FROM Log),

day_diff AS (
    SELECT user_id, 
           DATE_SUB(login_time, rank) AS diff 
    FROM day_rank),

continuous_day AS (
    SELECT user_id, 
           COUNT(*) AS cnt
    FROM day_diff
    GROUP BY user_id, diff);

SELECT user_id, MAX(cnt) 
FROM continuous_day
GROUP BY user_id;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM