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

标签 sql mysql

假设我有一个包含以下字段的“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/

相关文章:

SQL Server 查询性能 : Nested cursors

php - 我想用ajax在文本框中显示id

php - 如何在基于 php 的系统中的同一页面上显示登录错误消息?

mysql - 删除重复的指纹条目

php - 尝试在 PHP 中更新数据库时出现 Mysql 错误,并重定向到 null 位置

mysql - 没有子查询的过滤计数和总计数

mysql - 半正矢距离 - MySQL 和 PHP 对于相同的公式返回不同的结果

php - 我应该在哪里管理数据库的一致性?

php - 如果行为空不工作 mysql

mysql - 当标识符不是保留字或带有空格时,为什么必须使用反引号?