2017-06-14 46 views
0

我不知道如何實現預期的結果,但基本上,我需要使用max(修訂版)和group by release_number,文件名和服務器返回預期結果。目的是使用結果來檢索給定表上每個對象的最新版本。順便說一下,我使用的是mysql。選擇表上的每個對象的最新版本

表內容

id release_number filename  server revision 
18271 00.00.01  content.text local  7530 
18414 00.00.02  content_b.text remote 7859 
18415 00.00.02  content_a.text remote 7955 
18565 00.00.03  content.text local  8186 
18608 00.00.04  content_b.text remote 8248 

預期結果

id release_number filename  server revision 
18415 00.00.02  content_a.text remote 7955 
18565 00.00.03  content.text local  8186 
18608 00.00.04  content_b.text remote 8248 

編輯:

這似乎解決了這個問題,但我不知道這是否是正確的如何做到這一點,有更多經驗的人可以確認一下嗎?

select * from table where id in (
    SELECT max(id) 
    FROM table 
    GROUP BY server, filename 
    HAVING max(revision) 
) 

回答

0

找到每個文件名中的最新版本號並加入結果返回到原始表

SELECT a.* 
FROM yourtable a 
     INNER JOIN (SELECT Max(revision) AS Max_revision, 
          filename 
        FROM yourtable 
        GROUP BY filename) b 
       ON a.filename = b.filename 
        AND a.revision = b.Max_revision 

或者你可以使用correlated subquery

SELECT * 
FROM yourtable a 
WHERE revision = (SELECT Max(revision) 
        FROM yourtable b 
        WHERE a.filename = b.filename) 
+0

@Prdp你好,你可以檢查我的編輯看看它是否有任何意義? –

+0

@Serg哈哈耶:D –

相關問題