,我有以下結構的表:集團通過在MySQL
ID | COMPANY_ID | VERSION | TEXT
---------------------------------
1 | 1 | 1 | hello
2 | 1 | 2 | world
3 | 2 | 1 | foo
是有辦法獲得最新的記錄版本只,也就是說我想有作爲的結果集的ID 2和3?
,我有以下結構的表:集團通過在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