Sam*_*ant 1 mysql greatest-n-per-group
我有两张桌子:
users:
user_id user_name
data:
user_id user_data user_time
Run Code Online (Sandbox Code Playgroud)
我想从数据表中选择最新的条目,但返回user_name, user_id, user_data和user_time.
我尝试了以下查询,但它返回第一个条目,而不是每个用户的最后一个条目:
sql = "SELECT users.user_name, users.user_id, data.user_data, data.user_time
FROM users
INNER JOIN data ON data.user_id = users.user_id
GROUP BY users.user_name
ORDER BY data.user_time DESC";
Run Code Online (Sandbox Code Playgroud)
使用GROUP BY和MAX,WHERE ... IN:
SELECT u.user_id, u.user_name, d.user_data, d.user_time
FROM users u
INNER JOIN data d ON d.user_id = u.user_id
WHERE (d.user_id, d.user_time) =
(SELECT user_id, MAX(user_time) FROM data GROUP BY user_id)
Run Code Online (Sandbox Code Playgroud)
我认为你最好将data_id列添加到数据表中.除非是data_id,否则user_id和user_time都是必需的PRIMARY KEY(而user_time并不总是唯一的,不可靠的)
如果有data_id,它可能很简单:
SELECT u.user_id, u.user_name, d.user_data, d.user_time
FROM users u
INNER JOIN data d ON d.data_id =
(SELECT data_id FROM data
WHERE user_id = u.user_id ORDER BY data_time DESC LIMIT 1)
Run Code Online (Sandbox Code Playgroud)