2011-11-16 207 views
3

,我有以下結構的表:集團通過在MySQL

ID | COMPANY_ID | VERSION | TEXT 
--------------------------------- 
1 |  1  | 1 | hello 
2 |  1  | 2 | world 
3 |  2  | 1 | foo 

是有辦法獲得最新的記錄版本只,也就是說我想有作爲的結果集的ID 2和3?

+1

爲什麼只有2和3?你只想要2個最新的記錄? – matino

+2

@matino 2&3通過'COMPANY_ID'擁有'MAX(VERSION)' –

+0

@matino:如果我理解正確:爲每個company_id檢索最高版本的ID – knittl

回答

3

我確定有更好的方法,但我傾向於使用這種查詢:

SELECT * 
FROM 
    (SELECT * FROM test ORDER BY VERSION DESC) AS my_table 
GROUP BY COMPANY_ID 

產生以下結果集:

ID | COMPANY_ID | VERSION | TEXT 
--------------------------------- 
2 |  1  | 2 | world 
3 |  2  | 1 | foo 
+0

你告訴我!這個對我有用。 – Chris

+0

經過測試,它的工作原理。你可以使用*和一個group子句。 – Chris

+0

公司1是'世界' – Chris

0

如果您的ID進行排序(當且僅當高ID更新的版本):

SELECT t.*, a.maxversion 
FROM (
    SELECT MAX(id) maxid, MAX(version) maxversion 
    FROM table 
    GROUP BY company_id 
) a 
INNER JOIN table t 
ON a.maxid = t.id 

但是,如果你的ID是不正確排序,您需要使用以下查詢:

SELECT t.* 
FROM (
    SELECT company_id, MAX(version) maxversion 
    FROM table 
    GROUP BY company_id 
) v 
INNER JOIN table t 
ON v.company_id = t.company_id 
AND v.maxversion = t.version 

(假設有UNIQUE約束/索引(company_id, version)

3

試試這個:

SELECT * 
FROM (
    SELECT company_id, MAX(version) maxVersion 
    FROM table 
    GROUP BY company_id) as val 
JOIN table t ON (val.company_id = t.company_id AND t.version = val.maxversion) 
+0

您需要在'JOIN表' – Chris

+0

Thx Chris更新後添加t別名 – Fred