MySQL使用最新的时间戳选择具有不同ID的表中的所有行

时间:2014-06-26 11:31:13

标签: mysql sql

基本上,

id      status       timestamp

1       Good         0
2       Good         1
1       Bad          2

我想要

id      status       timestamp

2       Good         1
1       Bad          2

回到我身边。

这是因为我想知道表中所有id的最新状态。我尝试过一些天真的东西,如:

SELECT * FROM my_tbl group by id order by 'timestamp' desc;

但这显然不会奏效,任何想法?我确定它非常简单,但我无法弄明白:/

3 个答案:

答案 0 :(得分:1)

select t1.id, t1.status, t1.timestamp
from my_tbl as t1
where t1.timestamp = (select max(timestamp)
                      from my_table t2
                      where t1.id = t2.id)

然而,这将返回两次具有相同最高时间戳的ID。

答案 1 :(得分:1)

我倾向于使用not exists形式:

SELECT *
FROM my_tbl t
WHERE NOT EXISTS (SELECT 1
                  FROM my_tbl t2
                  WHERE t2.id = t.id and t2.timestamp > t.timestamp
                 );

这实现了:"从my_tbl获取所有行,其中不存在具有相同ID的行,该行具有更大的时间戳"。这是一种奇特的说法,让我得到每行最大时间戳的行。

对于性能,这应该有mytble(id, timestamp)的索引。

请注意删除timestamp上的单引号。

答案 2 :(得分:1)

试试这个.. 加入比子查询快得多。

select t1.* From Table t1
LEFT JOIN Table t2 on t2.id=t1.id and t2.timestamp > t1.timestamp
where t2.id IS NULL.