3

我有一张像这样的桌子:

file   MajorVersion MinorVersion
a      0            1
b      0            1
a      0            2
a      0            3
b      1            0
a      1            0
b      1            1

我想获取每个文件的最新版本(最高主要版本的最高次要版本)。在这种情况下:

a 1 0
b 1 1

它似乎可以通过两个连接和按文件分组,但我认为可能有更好的方法。也许通过使用拥有?

4

3 回答 3

3

只需要一个连接:

SELECT   file, MajorVersion, MAX(MinorVersion) MinorVersion
FROM     my_table NATURAL JOIN (
  SELECT   file, MAX(MajorVersion) MajorVersion
  FROM     my_table
  GROUP BY file
) t
GROUP BY file

sqlfiddle上查看。

于 2012-12-13T00:08:05.217 回答
0

两种join方法是:

select t1.* from `table` as t1
JOIN
(
  select `file` , max(`minor`) as `minor` from `table` 
  group by `file` , `major` 
) as t2
on t1.`file` = t2.`file` and t1.`minor` = t2.`minor` and t1.`major` = t2.`major`
JOIN
(
select `file` , max(`major`) as `major` , `minor` from `table` 
group by `file`
)  as t3
on t1.`file = t3.`file` and t1.`major` = t3.`major`
于 2012-12-13T03:57:33.933 回答
0

低于 10 的次要版本的 No-JOIN 版本:

SELECT file, MAX(CAST(CONCAT(Majorversion, '.', MinorVersion) AS DECIMAL(5,1))) as version
FROM my_table
group by file

结果:

file    version
a       3.0
b       1.1

次要版本 >= 10 需要一些额外的格式:-)

于 2018-12-11T19:08:34.320 回答