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

2つの結合とファイルごとのグループ化で可能のようですが、もっと良い方法があると思いました。多分持っているのを使って?

4

3 に答える 3

3

必要な参加は 1 つだけです。

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

2 つの結合方法は次のとおりです。

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 に答える