首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

T-SQL 找出使用者連續登入天數區間:分步拆解與視窗函數實作

     編輯:關於SqlServer

需求

登入日誌表記錄每次登入時間,找出每位使用者按「天」連續登入的起迄時間與天數。

分步實作

  1. 天級別聚合:以 `DATEDIFF(DAY, '2014-01-01', LoginDate)` 將時間轉為相對天數,`GROUP BY UID, DiffDays` 取每日首尾登入時間(圖 1)。

    原始日誌

    天級別聚合

    圖 1. 天級別聚合後可清晰見中斷

  2. 加入排序序號:`ROW_NUMBER() OVER (PARTITION BY UID ORDER BY DiffDays)` 得 `RID`(圖 2)。

    加入 RID

    圖 2. 加入 RID 後 DiffDays 與 RID 差值恆定即連續

  3. 自我聯結找連續區間:`T2.DiffDays - T1.DiffDays = T2.RID - T1.RID` 為連續條件,取 `RID=1` 即各區間起點(圖 3)。

建立叢集索引 `(UID, DiffDays)` 加速。完整 CTE 腳本輸出 `MinLoginDate, MaxLoginDate, MinDiffDays, MaxDiffDays`。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved