有温暖的祝福。
我有一个包含大量数据的表,我需要所有数据,但是例如最后更新的数据
Table
id - name - user_id - email
1 - abc - 1 - abc@email.com
2 - xyz - 2 - xyz@email.com
3 - abc - 1 - abc@email.com
4 - pqr - 3 - pqr@email.com
5 - abc - 1 - abc@email.com
6 - pqr - 4 - pqr@email.com
现在我查询类似这样的东西
SELECT MAX(id),*
FROM `table`
GROUP BY user_id
ORDER BY id DESC
但是它没有返回预期的输出。我的预期输出是
id - name - user_id - email
5 - abc - 1 - abc@email.com
2 - xyz - 2 - xyz@email.com
4 - pqr - 3 - pqr@email.com
6 - pqr - 4 - pqr@email.com
仅显示最后插入的数据。我指的是this答案,但它并非用于获取所有数据。那么,如何在对id进行分组时获取最后插入的所有数据?
答案 0 :(得分:2)
您可以在同一表上使用自我联接以选择每个用户的最新行
SELECT a.*
FROM `table` a
JOIN (
SELECT user_id , MAX(id) id
FROM table
GROUP BY user_id
) b ON(a.user_id = b.user_id AND a.id = b.id)
ORDER BY a.id DESC
答案 1 :(得分:1)
特别是如果要订购最终结果,则应考虑使用相关子查询:
select t.*
from t
where t.id = (select max(t2.id)
from table t2
where t2.user_id = t.user_id
)
order by t.id desc;
为了提高性能,您希望在(user_id, id)
和(id)
上建立索引。