2017-04-05 41 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