如何有效地获取mysql表中具有最高版本的条目

时间:2019-06-06 13:13:38

标签: mysql

我需要从mysql获得具有给定id的条目,但版本应为最大。

我有一个条目表。所有条目都有id和version(这两个是表的组合键)。我需要获取具有唯一ID和最高版本的所有条目。如何有效地做到这一点。 1.我是否全部阅读并为每个ID选择最大值。 2.我是否创建一个名为is_latest的列,在其上建立索引,并在放置新条目时将其设置为true,而将旧条目更新为false。 3.别的。 :)

应注意,大多数呼叫将被读取(> 99%)。

让该表具有ID为1且版本从1到n的n个条目

id  version  name  ...
1   1        abcd  ...
1   2        abcd  ...
1   3        defg  ...

我想获得最后一个条目

1   3        defg  ...

3 个答案:

答案 0 :(得分:2)

在mysql中,您可以使用order by并将单个ID限制为1

select  * 
from my_table  
order by  version desc 
limit 1 

of个ID
使用内部联接最大

select * 
from my_table m 
inner join (
  select  id, max(version) max_ver 
  from my_table 
  group by id 
  ) t  on t.max_ver  = m.version  and t.id = m.id

答案 1 :(得分:1)

我认为您正在寻找MAX()函数。

SELECT MAX(version) from my_table where id = your_id

您可以在此处获得更多信息:https://sql.sh/fonctions/agregation/max(法国网站)

此处的示例:https://www.db-fiddle.com/f/tJHG1JT6RJLGJJoamYHXzQ/1

答案 2 :(得分:0)

请参阅以下数据库提琴:https://www.db-fiddle.com/f/wMxb7S5tCGVA8gsXLHUHS3/0

SELECT t2.id, t2.version, t1.name
FROM my_table t1
JOIN (
    SELECT id, max(version) version FROM my_table GROUP BY id
) t2 ON t1.id = t2.id AND t1.version = t2.version
相关问题