假设我有一个包含以下字段的“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
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)
归档时间: |
|
查看次数: |
10288 次 |
最近记录: |