我有这些表格:
我想在使用此查询的每个项目中获取最新步骤:
select stepName
from step
where step.step=(select max(idstep) from stepOfProject where idProject=1) ;
但它只是为1号项目工作;我想获得所有projectId。
答案 0 :(得分:0)
试试这个:
select s1.stepName, sp1.projectId
from steps s1
join stepOfProject sp1 on s1.stepId = sp1.stepId
left join stepOfProject sp2 on sp1.idProject = sp2.idProject
and sp2.stepId > sp1.stepId
where sp2.stepId is null
left join
在这里做的是检查是否存在属于同一项目的另一个步骤,其中stepId
更高。如果该记录存在,那么该记录将从结果排除(这是sp2.stepId is null
所做的)。
每个项目只留下编号最高的stepId
。
答案 1 :(得分:0)
也许我完全不理解为什么你会这么做...我认为尼克是对的 - 为什么不使用小组,除非这是一个学术练习。
将一些样本数据作为预期结果会有所帮助,但不足以:
select
idProjectSummary.idProject, step.step, step.stepName
from
step
join (
select idProject, max (idstep) as max_step
from stepOfProject
group by idProject ) as idProjectSummary on
step.step = idProjectSummary.max_step
我有一段时间没有使用MySQL,但上次使用它时它不支持with
子句。
答案 2 :(得分:0)
起初我以为你在使用Sql Server,我这样做:
select s.stepName, p.idProject
from step s
cross apply (select TOP 1 idProject from stepOfProject where idstep=s.step order by idstep desc) p
唉,MySql不支持APPLY操作符,所以你必须解决这个问题,这需要一个GROUP BY(虽然它不清楚你为什么要避免这种情况):
SELECT s.stepName, p.idProject
FROM step s
INNER JOIN (SELECT idProject, MAX(idstep) as idstep FROM stepOfProject GROUP BY idProject) p ON p.idstep = s.step