我有一个名为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或这些条目的整行。
性能不是问题,因为只有几百个条目。
答案 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