BussnissLogs
- BussnissLogsID (PK)
- UserID
- HappeningTime
WITH Ranked AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY HappeningTime DESC) AS rn
FROM BussnissLogs
)
SELECT *
FROM Ranked
WHERE rn = 1;
PARTITION BY UserID:以用戶分組。ORDER BY HappeningTime DESC:組內按時間倒序,最新排第一。ROW_NUMBER():給每列編號,第一列為 1。rn = 1 即得各用戶最新一筆。SELECT bl.*
FROM BussnissLogs bl
INNER JOIN (
SELECT UserID, MAX(HappeningTime) AS MaxTime
FROM BussnissLogs
GROUP BY UserID
) t ON bl.UserID = t.UserID AND bl.HappeningTime = t.MaxTime;
注意:若同一用戶同一時間有多筆,會全部回傳;可再加 TOP 1 或 ROW_NUMBER 去重。
CREATE INDEX IX_BussnissLogs_UserID_Time ON BussnissLogs(UserID, HappeningTime DESC);