我有用户表,每个用户都有多条记录。我需要获取每个用户的最新插入记录。如何使用MySQL
用户表
id name value updated_at
1 abc 123 2011-02-03
2 xyz qwe 2011-04-03
3 abc asd 2011-08-08
4 xyz poi 2011-08-07
我的输出应该是
id name value updated_at
3 abc asd 2011-08-08
4 xyz poi 2011-08-07
我使用了像
这样的查询 select id,name,value,updated_at from users group by name having max(updated_at)
select id,ep_name,position,max(updated_at) from test1 group by ep_name having max(updated_at)
但我无法获得理想的结果。我得到max(updated_at)值但无法获得匹配的行。请帮忙
注意:这可以在不使用子查询的情况下完成。请帮忙
提前致谢
答案 0 :(得分:2)
SELECT
users.id,users.name, users.`value`, users.`updated_at`
FROM
users
INNER JOIN
(
SELECT name, MAX(updated_at) AS `updated_at`
FROM
users
GROUP BY
name
) max_users
ON
users.name = max_users.name
AND
users.updated_at = max_users.updated_at
Dan非常感谢... :)组中的小变化以匹配我的输出
答案 1 :(得分:1)
不,没有子查询就无法做到这一点。子查询是单个查询的一部分。
SELECT
users.*
FROM
users
INNER JOIN
(
SELECT
id,
MAX(updated_at) AS `updated_at`
FROM
users
GROUP BY
id
) max_users
ON
users.id = max_users.id
AND
users.updated_at = max_users.updated_at
答案 2 :(得分:0)
你是对的Amal先生你不会得到你上面指定的答案.Dan将会返回所有结果。
一定要试试这个你将会在途中
SELECT test.* FROM test INNER JOIN (SELECT MAX(updated_at) AS `updated_at` FROM test GROUP BY name) max_users
ON
test.updated_at = max_users.updated_at
第二个选项:
SELECT * FROM test WHERE updated_at IN(SELECT MAX(updated_at) FROM test GROUP BY name)
比第一个简单得多