2016-07-07 28 views
0

我很难弄清楚如何在MySQL中编写正确的代码。不使用GROUP BY子句的MySQL MAX函数

这里是我迄今为止...

SELECT ProjectSteps.ProjectID, ProjectSteps.StepID, Step.StepName, Step.Definition 
FROM ProjectSteps, Step 
WHERE ProjectSteps.ProjectID = 
    (SELECT MAX(ProjectSteps.StepID) OVER ProjectSteps.ProjectID 
    FROM ProjectSteps 
    WHERE ProjectSteps.ProjectID IN (1, 2, 3) 
    ) 
ORDER BY ProjectSteps.ProjectID; 

对于我的询问,我有2个表

STEP (StepId, StepName, Definition)

ProjectSteps (StepID, ProjectId, StartingDate, EndingDate) 

我得包括每个项目的最后一步的步骤和步骤定义的名称。

由于:

Project ID StepId StepName Definition 

我不能使用GROUP BY子句:(

希望有人会得到它的权利

+0

为什么你不能用'组by'? 'mysql'不支持使用'over'的窗口函数。可能使用'用户定义的变量'或者子查询和'limit',但是为什么? – sgeddes

+0

更好的问题是“为什么你不能使用group by?”而不是OP问题 –

+0

因为这是我的一个约束。 – GasFou

回答

0

我仍然不知道为什么你不能使用group by,但这里是另一个选项使用correlated subquery

select ps.projectid, s.stepid, s.stepname, s.definition 
from projectsteps ps 
    join step s on ps.stepid = s.stepid 
where ps.projectid in (1,2,3) 
    and s.stepid = (select stepid 
        from projectsteps ps2 
        where ps.projectid = ps2.projectid 
        order by ps2.stepid desc 
        limit 1)