資料表 Eng24VIPCourseIntention 中,同一 userid 與 classid 可能有多筆記錄(不同 addtime),需保留每組最新的一筆(addtime 最大)。
SELECT *
FROM (
SELECT
userid,
classid,
remark,
ROW_NUMBER() OVER (
PARTITION BY userid, classid
ORDER BY addtime DESC
) AS row_bank
FROM Eng24VIPCourseIntention
) AS ta
WHERE row_bank = 1;
WHERE row_bank = 1 過濾,僅保留各組第一筆。(userid, classid, addtime) 有適當索引,避免全表掃描與排序溢出。CROSS APPLY 或 TOP 1 WITH TIES 寫法比較執行計畫。此模式適用於「取各群組最新/最舊/最大/最小」等常見去重需求,語法簡潔且符合 ANSI SQL 標準。