2016-07-27 65 views
-4

我試圖獲取每個記錄的最新版本。例如,我試圖得到版本2的ID 13而不是版本1和2,我試過使用子查詢與MAX功能,但它沒有任何不同。在MySQL中獲取最新版本的記錄

td_asset上的主鍵是PRIMARY KEY(ass_id, ass_version)

** SQL查詢**

SELECT `ass_id` AS `id` 
, `ass_title` AS `name` 
, `ass_version` AS `version` 
FROM `td_asset` 
GROUP BY `ass_id`, `ass_version` 
ORDER BY `id` DESC, `ass_version` DESC; 

SQL查詢結果

id name  version 
13 test name 2 
13 test name 1 
12 test name 1 
11 test name 1 
10 test name 1 
9 test name 1 
8 test name 1 
7 test name 1 
6 test name 1 
5 test name 1 
4 test name 1 
3 test name 1 
2 test name 1 
1 test name 1 

任何建議/想法不勝感激。

+0

這個問題被問及無盡的回答,所以是的,我有一個建議。 – Strawberry

+0

@Strawberry,考慮到我先搜索了這個搜索引擎,並且找不到任何與我的搜索查詢相關的內容,我總是先搜索,以免嘗試重複。 – llanato

+0

我可以通過這種方式看到相關的9釐米的答案 - > – Strawberry

回答

1

雖然這個問題問了很多,也可以是有時很難別人的查詢適應您的情況。所以,處理這個問題的一種方法是使用子查詢。

SELECT 
    tda.ass_id AS id, 
    tda.ass_title AS name, 
    tda.ass_version AS version 
FROM td_asset tda 
WHERE tda.version = (SELECT MAX(tda2.version) FROM td_asset td2 WHERE tda2.id = tda.id) 
GROUP BY tda.ass_id 

這基本上說,每個id,查找最大版本,並使用該記錄。

還有其他方法可以解決這個問題,這只是其中之一。

+0

紳士,我很感謝您的幫助。 – llanato

+0

不用擔心。希望它有幫助。 –

-2

只有ass_id只需選擇MAX(ass_version)和組:

SELECT `ass_id` AS `id` 
    , `ass_title` AS `name` 
    , MAX(`ass_version`) AS `version` 
FROM `td_asset` 
GROUP BY `ass_id` 
ORDER BY `id` DESC, `ass_version` DESC;