V MySQL je nejbezpečnější způsob, jak toho dosáhnout, pravděpodobně pomocí proměnných:
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;
Nezahrnuje použití (nesprávné) funkce MySQL, která povoluje sloupce v SELECT
agregačního dotazu, které nejsou agregované a nejsou v GROUP BY
.
Zde je SQL Fiddle, který ukazuje, že to funguje.
EDIT:
K tématu pořadí hodnocení proměnných. Z dokumentace :
Výše uvedený kód technicky čte proměnnou ve stejném příkazu , ale je také ve stejném výrazu . Sémantika if()
(a case
které někdy také používám) zaručují pořadí vyhodnocení výrazů.