当我尝试执行此查询时,即使我得到其他正确的信息,它也会给我错误的fileid。 我无法弄清楚我的查询是什么问题? 以下是我的询问:
select fileid,filename,folderpath,max(version),filetype from fileinfo
group by concat(folderpath,filename);
此查询提供以下结果:
但是当我检查该特定文件的版本时,下面的不同之处是我的图像:
如果没有fileid 210它应该给我1642。
答案 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;