如何选择具有最高版本的所有条目?

时间:2012-06-21 17:37:50

标签: sql

我有一个名为documents的表格,其中包含字段ID,标题,版本和内容。

现在我希望获得具有最高版本的每个标题的所有ID(或行)。

假设我有以下数据:

+----+-------+---------+---------+
| id | title | version | content |
+----+-------+---------+---------+
|  2 | foo   |       1 | abc1    |
|  3 | foo   |       2 | abc2    |
|  4 | foo   |       3 | abc3    |
|  5 | bar   |       1 | abcd1   |
|  6 | bar   |       2 | abcd2   |
|  7 | baz   |       1 | abcde1  |
+----+-------+---------+---------+

我希望收到ID 4,6,7或这些条目的整行。

性能不是问题,因为只有几百个条目。

4 个答案:

答案 0 :(得分:4)

要检索整个行,您需要GROUP BY version使用MAX()聚合,并将其作为子查询连接到整个表以拉入其余列。 JOIN条件需要针对title, version的组合,因为它们一起唯一地标识了标题的最佳版本。

以下内容应独立于您正在使用的RDBMS:

SELECT 
  documents.id,
  documents.title, 
  documents.version,
  documents.content
FROM 
  documents
  JOIN (
    /* subquery pulls greatest version per title */
    SELECT
      title,
      MAX(version) AS version
    FROM documents
    GROUP BY title
    /* title, version pair is joined back against the main table */
  ) maxversions ON (documents.title = maxversions.title AND documents.version = maxversions.version)

答案 1 :(得分:1)

这是一个简单的小组:

select max(version)
from documents
group by title

如果您愿意,可以加入文档以获取完整的文档信息。

答案 2 :(得分:0)

怎么样:

SELECT * FROM dataz
WHERE version IN (
  SELECT TOP 1 version
  FROM dataz
  ORDER BY version DESC
)

答案 3 :(得分:0)

这将获得您想要的ID:

  Select max(id) as id from documents
group by title
  having count(1) = max(version)
order by id