2012-06-21 40 views
1

我有一個名爲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 | 
+----+-------+---------+---------+ 

我想收到無論是IDS 4,6,7或完整行對這些條目。

性能不是問題,因爲只有幾百個條目。

+0

您正在使用什麼RDBMS? –

+0

你可以將它們分組。一個很好的例子是在這裏:http://stackoverflow.com/questions/3998529/selecting-top-n-rows-for-each-group-in-a-table –

+0

在這種情況下,我使用Sqlite3 – ayckoster

回答

0

如何:

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

檢索整個行,你需要GROUP BY versionMAX()骨料,並加入作爲對整個表的子查詢中其餘的列拉。 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

這是一個簡單的GROUP BY:

select max(version) 
from documents 
group by title 

你可以加入迴文件,如果你喜歡,得到完整的文件信息。

0

這會得到你想要的ID:

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