为什么我的查询在mySql中提供了错误的fileid?

时间:2014-11-21 11:36:52

标签: mysql

当我尝试执行此查询时,即使我得到其他正确的信息,它也会给我错误的fileid。 我无法弄清楚我的查询是什么问题? 以下是我的询问:

select fileid,filename,folderpath,max(version),filetype from fileinfo
group by concat(folderpath,filename);

此查询提供以下结果:

enter image description here

但是当我检查该特定文件的版本时,下面的不同之处是我的图像:

enter image description here

如果没有fileid 210它应该给我1642。

3 个答案:

答案 0 :(得分:1)

使用聚合函数然后group by并不能保证在列数较少时从聚合列中完成选择。在你的情况下,你已经指出你正在选择一些东西并用其他东西进行分组。

另一种方法是使用左连接,如下所示,如果你想确保分组也考虑filetype等,你可以在join子句中添加附加条件。

select 
f1.*
from fileinfo f1
left join fileinfo f2 on  concat(f1.folderpath,f1.filename) = concat(f2.folderpath,f2.filename)
and f1.version < f2.version
where f2.fileid is null;

<强> demo

答案 1 :(得分:0)

因为MAX并不意味着您获得了最大值的整行。 Max仅获取列的最大值,并且它不会指向值的哪一行。而不是使用最大使用顺序来通过desc对您的版本进行排序。

答案 2 :(得分:-1)

您必须按所有字段进行分组:

select fileid,filename,folderpath,max(version),filetype from fileinfo

按fileid分组,concat(folderpath,filename),filetype;