代码之家  ›  专栏  ›  技术社区  ›  Philip Bennison

如何通过一个MySQL查询从我的表中获取所有最新的“版本”?

  •  2
  • Philip Bennison  · 技术社区  · 15 年前

    我有一张基本结构如下的桌子。

    unique_id | name | original | version
    -----------------
    1 | a1 | 1 | 1
    
    2 | b1 | 2 | 1
    
    3 | a2 | 1 | 2
    
    4 | a3 | 1 | 3
    
    5 | c1 | 5 | 1
    
    6 | b2 | 2 | 2
    

    现在应该很明显,有一种版本控制的形式,我们可以跟踪原始文档,也可以跟踪当前文档的版本。

    如果我想得到一个特定文档的最新版本,我会做如下的事情。

    SELECT * FROM table WHERE original = (SELECT original FROM table WHERE id = 3) ORDER BY version DESC
    

    我的问题是,如何只使用一个查询就得到表中所有最新版本的列表?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Lieven Keersmaekers    15 年前

    这个想法是

    • 使用当前最大版本生成所有原始ID的列表
    • 用这个唯一标识符列表加入您的表。
    SELECT *
    FROM table t
         INNER JOIN (     
           SELECT original, MAX(version) as version
           FROM tabel
           GROUP BY original
         ) tmax ON tmax.original = t.original and tmax.version = t.version