Оригиналното ви запитване е доста умно. Тук има малко по-различен подход. Той получава следващата област в подзаявка (използвайки корелирана подзаявка, както е във вашия пример). След това преброява редовете, където условията са верни:
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)
би трябвало да помогне на производителността.