基本上,
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;
但这显然不会奏效,任何想法?我确定它非常简单,但我无法弄明白:/
答案 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.