我不确定如何达到预期的结果,但基本上,我需要的是使用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)
)
答案 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)