2016-07-07 13 views
0

Ich habe eine Menge Schwierigkeiten, um herauszufinden, wie Sie den richtigen Code in MySQL schreiben. HierMySQL MAX-Funktion für Kategorien ohne Verwendung der GROUP BY-Klausel

ist das, was ich bisher ...

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; 

Für meine Frage, ich habe 2 Tabellen

STEP (StepId, StepName, Definition)

und

ProjectSteps (StepID, ProjectId, StartingDate, EndingDate) 

Ich habe zu bekommen Sowohl die Namen des Schrittes als auch die Schrittdefinition des letzten Schrittes habe ich für jedes Projekt.

Wie:

Project ID StepId StepName Definition 

ich keine GROUP BY-Klausel verwenden können :(

Hoffentlich wird jemand es richtig

+0

Warum können Sie nicht verwenden 'Gruppe by'? Fensterfunktionen, die 'over' verwenden, werden in' mysql' nicht unterstützt. Möglicherweise mit 'benutzerdefinierten Variablen' oder mit Unterabfragen und' limit', aber warum? – sgeddes

+0

Bessere Frage ist "Warum können Sie nicht Gruppe von verwenden?" Als OP Frage –

+0

Weil es eine der Einschränkungen ist, die ich habe. – GasFou

Antwort

0

Ich bin immer noch nicht sicher, warum kann man nicht Verwenden Sie group by, aber hier ist eine weitere Option mit einem 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)