2017-04-05 73 views
0

我將更新系統,我想從數據庫獲取文件更新。爲每個名稱選擇最新記錄

請求應該給我的所有文件,但如果有幾行用相同的文件名,我想只有這與「版本」(號)最高值

所以文件名中的反應將是獨一無二的。

(實在不好意思,我不知道怎麼說了吧)

回答

1

如果FILE_VERSION只是爲了演示目的,不保持關係值,你可以這樣做:

select filename, max(file_version) as file_version 
    from your_table 
group by filename; 

否則,如果FILE_VERSION必須從同一行的文件名,那麼你可以這樣做:

select distinct a.filename, a.file_version 
    from your_table a 
    join (select filename, max(file_version) as file_version 
      from yourtable 
     group by filename) b 
    on b.filename = a.filename 
    and b.file_version = a.file_version 
order by a.filename; 
+0

好的,我會檢查它 – TheChilliPL

+0

它會與「where file_version <...」一起工作嗎? – TheChilliPL

+0

當然,使用'min(file_version)'而不是'max(file_version)'。 – JuveLeo1906

1

GROUP BY會有性能比較的影響,如果表是很大的。這是更好地使用LIMIT 1如果你只需要一個行

SELECT 
    file, 
    file_version 
FROM 
    file_history 
WHERE 
    file = 'filename' 
AND file_version < 5 
ORDER BY file_version DESC 
LIMIT 1 

你應該添加索引到file_version列,使這個查詢優化。

+0

我想獲得所有文件的最新版本(指定最小和最大版本) – TheChilliPL

+0

好的,那麼JuveLeo1906的回答是正確的。 – wormi4ok