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;
SELECT
の列を許可するMySQL(mis)機能の使用は含まれません 集計されておらず、GROUP BY
にない集計クエリの 。
こちら は、動作していることを示すSQLフィドルです。
編集:
変数の評価の順序について。 ドキュメント から :
上記のコードは、技術的には、同じステートメントの変数を読み取ります。 、ただし同じ式 。 if()
のセマンティクス (およびcase
私も時々使用します)式の評価の順序を保証します。