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=25 的文档的最大版本,而不是 pageid=24。运行查询应该只产生第 3、4、5 行而不是第 8、9、10 行(因为它们与 pageid=24 相关联)。

我已经为这个问题整理了一个SQL Fiddle

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 为此返回有问题的三行

于 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 回答