В MySQL най-сигурният начин да направите това вероятно включва променливи:
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;
Не включва използването на функцията MySQL (неправилно), която позволява колони в SELECT
на заявка за агрегиране, които не са агрегирани и не са в GROUP BY
.
Тук е SQL Fiddle, който показва, че работи.
РЕДАКТИРАНЕ:
По темата за реда за оценка на променливите. От документацията :
Технически горният код чете променливата в същия изявление , но също така е в същия израз . Семантиката на if()
(и case
които понякога също използвам) гарантират реда на оценка на изразите.