选择表中每个对象的最新修订版

时间:2017-06-14 10:57:00

标签: mysql sql

我不确定如何达到预期的结果,但基本上,我需要的是使用max(revision)和group by release_number,filename和server返回预期的结果。目的是使用结果来检索给定表上每个对象的最新版本。顺便说一下,我正在使用mysql。

表格内容

id    release_number filename        server    revision
18271 00.00.01       content.text    local     7530
18414 00.00.02       content_b.text  remote    7859
18415 00.00.02       content_a.text  remote    7955
18565 00.00.03       content.text    local     8186
18608 00.00.04       content_b.text  remote    8248

预期结果

id    release_number filename        server    revision
18415 00.00.02       content_a.text  remote    7955
18565 00.00.03       content.text    local     8186
18608 00.00.04       content_b.text  remote    8248

编辑:

这似乎解决了这个问题,但我不确定这是否是正确的方法,任何有经验的人都可以确认一下吗?

select * from table where id in (
  SELECT max(id)
  FROM table
  GROUP BY server, filename
  HAVING max(revision)
)

1 个答案:

答案 0 :(得分:0)

查找每个文件名的最新修订号,并将结果连接回原始表

SELECT a.*
FROM   yourtable a
       INNER JOIN (SELECT Max(revision) AS Max_revision,
                          filename
                   FROM   yourtable
                   GROUP  BY filename) b
               ON a.filename = b.filename
                  AND a.revision = b.Max_revision

或者您可以使用correlated subquery

SELECT *
FROM   yourtable a
WHERE  revision = (SELECT Max(revision)
                   FROM   yourtable b
                   WHERE  a.filename = b.filename)