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.