2016-07-07 227 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)