集团通过在MySQL

问题描述:

,我有以下结构的表:集团通过在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

我确定有更好的方法,但我倾向于使用这种查询:

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

如果您的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)

试试这个:

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