假设我有一个包含以下字段的“user_log”表:
- 编号
- 用户编号
- 状态文本
- 时间戳
我如何编写一个只选择该表中所有用户的最后更新的查询?
感谢您的帮助:)
最佳答案
假设ID是一个自增id,你可以这样做:
SELECT *
FROM user_log
INNER JOIN
(SELECT MAX(id) as id FROM user_log GROUP BY user_id) last_updates
ON last_updates.id = user_log.id
如果你想真正迂腐地正确并涵盖所有极端情况(具有相同时间戳的多次更新、无序插入等),你可以使用时间戳:
SELECT *
FROM user_log
INNER JOIN
(SELECT MAX(id)
FROM user_log
INNER JOIN
(SELECT DISTINCT user_id, MAX(timestamp) as timestamp
FROM user_log GROUP BY user_id
) last_updates
ON last_updates.user_id = user_log.user_id
AND last_updates.timestamp = user_log.timestamp
) last_update
ON last_update.id = user_log.id
关于sql - MySQL:如何只为每个用户选择最后一次更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588074/