元のクエリはかなり賢いです。これは少し異なるアプローチです。サブクエリの次の領域を取得します(例のように相関サブクエリを使用)。次に、条件が真である行をカウントします。
select sum(case when area = 'Front' and nextarea = 'Back' then 1 else 0 end)
from (SELECT t1.*,
(SELECT t2.area
FROM table t2
where t2.order > t1.order
order by t2.order
limit 1
) as nextarea
FROM table t1;
このクエリはあなたのクエリよりも高価です。 order
で適切な等式条件を使用することができました 桁。ここでは、limit
で並べ替えが必要です 次の値を取得します。 (order, area)
の複合インデックス パフォーマンスに役立つはずです。