需求
登入日誌表記錄每次登入時間,找出每位使用者按「天」連續登入的起迄時間與天數。
分步實作
- 天級別聚合:以 `DATEDIFF(DAY, '2014-01-01', LoginDate)` 將時間轉為相對天數,`GROUP BY UID, DiffDays` 取每日首尾登入時間(圖 1)。


圖 1. 天級別聚合後可清晰見中斷
- 加入排序序號:`ROW_NUMBER() OVER (PARTITION BY UID ORDER BY DiffDays)` 得 `RID`(圖 2)。

圖 2. 加入 RID 後 DiffDays 與 RID 差值恆定即連續
- 自我聯結找連續區間:`T2.DiffDays - T1.DiffDays = T2.RID - T1.RID` 為連續條件,取 `RID=1` 即各區間起點(圖 3)。
建立叢集索引 `(UID, DiffDays)` 加速。完整 CTE 腳本輸出 `MinLoginDate, MaxLoginDate, MinDiffDays, MaxDiffDays`。