1

我有一个名为的表documents,其中包含字段 id、title、version 和 content。

现在我想为每个具有最高版本的标题获取所有 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  |
+----+-------+---------+---------+

我想接收这些条目的 ids 4、6、7 或整行。

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

4

4 回答 4

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)
于 2012-06-21T17:41:15.570 回答
1

这是一个简单的分组:

select max(version)
from documents
group by title

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

于 2012-06-21T17:41:37.167 回答
0

这将获得您想要的 ID:

  Select max(id) as id from documents
group by title
  having count(1) = max(version)
order by id
于 2012-06-21T18:02:14.187 回答
0

怎么样:

SELECT * FROM dataz
WHERE version IN (
  SELECT TOP 1 version
  FROM dataz
  ORDER BY version DESC
)
于 2012-06-21T17:40:56.413 回答