I MySQL involverer den sikreste måde at gøre dette sandsynligvis på variabler:
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;
Det involverer ikke brug af MySQL (mis)-funktionen, der tillader kolonner i SELECT
af en aggregeringsforespørgsel, der ikke er aggregeret og ikke i GROUP BY
.
Her er en SQL Fiddle, der viser, at den virker.
EDIT:
Om emnet rækkefølgen af evaluering af variabler. Fra dokumentationen :
Ovenstående kode læser teknisk set variablen i den samme sætning , men det er også i det samme udtryk . Semantikken for if()
(og case
som jeg nogle gange også bruger) garanterer rækkefølgen af vurderingen af udtrykkene.