0

重複の可能性:
SQLでバージョンが異なるドキュメントのリストの最大バージョンのみを選択するにはどうすればよいですか?

ファイルのバージョンとそれらのファイルが関連付けられているページを格納するテーブルがあります

CREATE TABLE tbl (id int, title varchar(32), version int, pageid int);
insert into tbl values (1, 'file1', 1, 25);
insert into tbl values (2, 'file2', 1, 25);
insert into tbl values (3, 'file1', 2, 25);
insert into tbl values (4, 'file2', 2, 25);
insert into tbl values (5, 'file3', 1, 25);
insert into tbl values (6, 'file1', 1, 24);
insert into tbl values (7, 'file2', 1, 24);
insert into tbl values (8, 'file1', 2, 24);
insert into tbl values (9, 'file2', 2, 24);
insert into tbl values (10, 'file3', 1, 24);

pageid = 24ではなく、pageid=25に添付されているドキュメントの最大バージョンのみを返すクエリを生成したいと思います。クエリを実行すると、行3、4、5のみが生成され、行8、9、10は生成されません(pageid = 24に関連付けられているため)。

この問題のためにSQLフィドルをまとめました。

4

2 に答える 2

2

質問のタグが正しいと仮定すると(投稿したフィドルはMySQL用です)、分析関数を使用できます

SELECT id, title, version, pageid
  FROM (SELECT t.*, 
               MAX(version) OVER (partition by title) max_version
          FROM tbl t
         where pageid=25)
 WHERE version = max_version;

これに対する SQL Fiddleが問題の 3 つの行を返すことがわかります。

于 2012-09-12T23:57:11.670 に答える
2

トリックを行う簡単なクエリを次に示します。

select *
from tbl t1
inner join (select title, max(version) as version from tbl where pageid=25 group by 1) t2 on(t1.title=t2.title and t1.version=t2.version)
where t1.pageid=25

そして、これがそのSQL Fiddle の出力です。探していることを実行しますか?

于 2012-09-13T00:09:26.030 に答える