在表格中获取最新行的最佳做法

时间:2014-08-14 23:16:43

标签: mysql sql select sql-order-by

考虑这样一个表:

enter image description here

id列设置为自动递增,update_time列应该是行在表格中插入的日期。

我想简单地为user_id = x的用户获取最新条目,我发现有一些方法:

SELECT * FROM mytable WHERE user_id = x ORDER BY update_time DESC LIMIT 1

并且

SELECT * FROM mytable WHERE user_id = x MAX(update_time)

另一个查询是选择id值最高的行

我不太确定后者的语法(请纠正我)。

这似乎是一项微不足道的任务,但有一个案例是其他人改变了表上的auto_increment值,有时服务器的时间也发生了变化(这种情况在我的情况下并没有发生,但是如果确实!!?)

获取user_id的最新条目行的最安全查询是什么(我的意思是为user_id = x的用户返回weight,height和activity_level的查询)

我是否需要在表格中添加更多列?如果是的话,是什么?

3 个答案:

答案 0 :(得分:2)

我喜欢这种联接方法。假设userID + update_time是唯一的...如果它不是,那么它将拉回多行。

select user_id, max(update_time) maxtime from table group by user_id

通过用户ID获取最大更新时间的简单语句。将它用作带内连接的子查询(内连接将用作过滤器)

select t.*
from table t
inner join
 (select user_id, max(update_time) maxtime 
     from table group by user_id
      --where user_id = x
       )a
on a.user_id = t.user_id and a.maxtime = t.update_time

我注释了user_id = x行的位置......这种方法的优点是你可以立即获得所有用户及其最新用户。

答案 1 :(得分:1)

SELECT * FROM mytable WHERE user_id = x AND update_time = (SELECT MAX(update_time) FROM mytable WHERE user_id = x)

答案 2 :(得分:1)

这真的不一定非常复杂:

SELECT id
FROM table
WHERE user_id = x
ORDER BY update_time DESC
LIMIT 1

这个版本将是最快,最简单,最容易阅读的版本。在各方面都是一场胜利。