MySQL:如何只为每个用户选择最后一次更新?

Key*_*oke 2 mysql sql

假设我有一个包含以下字段的“user_log”表:

  • ID
  • 用户身份
  • 状态文本
  • 时间戳

如何编写一个查询,只为该表中的所有用户选择最后一次更新?

感谢你的帮助 :)

Eri*_*lje 8

假设 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
Run Code Online (Sandbox Code Playgroud)

如果您想要真正迂腐正确并涵盖所有极端情况(具有相同时间戳的多次更新、乱序插入等),您可以使用时间戳:

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
Run Code Online (Sandbox Code Playgroud)