集团通过在MySQL
问题描述:
,我有以下结构的表:集团通过在MySQL
ID | COMPANY_ID | VERSION | TEXT
---------------------------------
1 | 1 | 1 | hello
2 | 1 | 2 | world
3 | 2 | 1 | foo
是有办法获得最新的记录版本只,也就是说我想有作为的结果集的ID 2和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
答
如果您的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)
)
为什么只有2和3?你只想要2个最新的记录? – matino
@matino 2&3通过'COMPANY_ID'拥有'MAX(VERSION)' –
@matino:如果我理解正确:为每个company_id检索最高版本的ID – knittl