[英]mysql : select the last action of each user
我有一張這樣的表:
ActionTime UserID Score
2011-08-15 12:06:00 1 14
2011-08-15 14:45:00 2 17
2011-08-16 12:17:00 1 20 <== select this row
2011-08-16 04:28:00 2 14
2011-08-17 06:52:00 2 16 <== select this row
我想找出每個用戶在最后一次操作中的 Score 和 ActionTime。 (如上所示)
我知道我可以像這樣一一做到:
SELECT * from MyTable WHERE UserID=? ORDER BY ActionTime DESC LIMIT 1
但是我們有數百個不同的 UserID(當然它還在不斷增加)。 這將導致大量 PHP 到 MySQL 的通信,這是不可接受的。
我只是想知道是否可以一次執行/通信獲取所有行?
如果首先查詢每個 UserID 的最大 ActionTime,則可以將其用作子查詢來選擇 Score:
SELECT m.*
FROM MyTable AS m
INNER JOIN (
SELECT MAX(i.ActionTime) ActionTime, i.UserID
FROM MyTable i
GROUP BY i.UserID
) AS j ON (j.ActionTime = m.ActionTime AND j.UserID = m.UserID)
上述 SQL 存在一個問題 - 如果同一用戶有超過 1 行具有相同的 ActionTime,您將獲得該用戶的多行。 如果您決定在這種情況下獲得最高分數,您可以執行以下操作:
SELECT m.ActionTime, m.UserID, MAX(m.Score) Score
FROM MyTable AS m
INNER JOIN (
SELECT MAX(i.ActionTime) ActionTime, i.UserID
FROM MyTable i
GROUP BY i.UserID
) AS j ON (j.ActionTime = m.ActionTime AND j.UserID = m.UserID)
GROUP BY m.UserID
SELECT * from MyTable Group by UserId ORDER BY ActionTime DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.