2016-03-30 5 views
0

Ich versuche, eine MySQL-Abfrage mit phpMyAdmin zu schreiben, Ich brauche das Maximun ‚Standort‘ nehmen In ‚Wert1‘, aber mit der Bedingung von ‚Wert2‘> 10 OR ‚Value3‘> 10.Innerer Join-Max-Wert in Tabelle MYSQL (PhpMyadmin)?

mit

In diesem Bild zeige ich das erwartete Ergebnis.

Expected Result of Query. CLICK Danke.

Ich versuche das, aber es funktioniert nicht

SELECT Wert1, Wert2, Wert3, Wert FROM mytable b1

WHERE Wert2 = (SELECT MAX (b2.Value2) FROM mytable b2 WHERE b1 Value1. = b2. Value1)

Bitte, i nedd ein allgemeines Schema, dieses Problem zu lösen.

+0

Wo ist Ihr Abfrageversuch? – Sean

+0

Hinweis: Sehen Sie sich Post-Aggregation-Filtering an. – Mihai

+1

Was passiert, wenn mehrere Werte in Value1 gleich dem Maximum sind? – apokryfos

Antwort

1

Sie tun könnte so etwas wie:

SELECT t1.Site, t1.Value1, t1.Value2, t1.Value3 
FROM Table t1 
WHERE Value1=(
     SELECT MAX(t2.Value1) 
     FROM Table t2 
     WHERE t2.Site = t1.Site 
) AND t1.Value2 > 10 AND t1.Value3 > 10; 

Wenn Sie mutliple Werte in Wert1 haben, die auf das Maximum gleich sind, würden Sie sie alle, solange die Wert2 und Wert3 Bedingungen erhalten bleiben erhalten.

Wenn Sie das nicht möchten, dann GROUP BY Site am Ende oder wählen Sie DISTINCT Site.

+0

Danke, es funktioniert, aber meine ursprüngliche Tabelle hat 70K Datensätze, und die Abfrage dauert bis zu 5 Minuten – geraqf

+0

@geraqf, wenn es keine gibt, fügen Sie einen Index zu Value1 und Site. Wenn das nicht hilft, können Sie eine eindeutige Primärschlüsselspalte in der Tabelle hinzufügen und dann anstelle einer geschachtelten Auswahl eine Verknüpfung für den Schlüssel erstellen, der dem Maximalwert entspricht. – apokryfos