2016-07-07 11 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'を使用することはできませんか? 'over'を使う' window関数 'は' mysql'ではサポートされていません。おそらく 'ユーザ定義の変数'やサブクエリや 'limit'で可能ですが、なぜか? – sgeddes

+0

より良い質問は、 "あなたはなぜグループを使用できないのですか?"というのは、OPの質問 –

+0

よりも、私の制約の1つです。 – 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) 
関連する問題