In MySQL geht das wahrscheinlich am sichersten mit Variablen:
select im.*
from (select im.*,
(@rn := if(@p = platform_type_id, @rn + 1,
if(@p := platform_type_id, 1, 1)
)
) as rn
from main_itemmaster im cross join
(select @rn := 0, @p := '') params
order by platform_type_id, (territory_id = 'US') desc
) im
where rn = 1;
Das beinhaltet nicht die Verwendung der MySQL (Miss-)Funktion, die Spalten im SELECT zulässt einer Aggregationsabfrage, die nicht aggregiert sind und nicht im GROUP BY enthalten sind .
Hier ist eine SQL-Fiddle, die zeigt, dass sie funktioniert.
BEARBEITEN:
Zum Thema der Reihenfolge der Auswertung von Variablen. Aus der Dokumentation :
Technisch gesehen liest der obige Code die Variable in derselben Anweisung , aber es befindet sich auch im selben Ausdruck . Die Semantik von if() (und case die ich manchmal auch benutze) garantieren die Reihenfolge der Auswertung der Ausdrücke.