Je oorspronkelijke vraag is nogal slim. Hier is een iets andere benadering. Het krijgt het volgende gebied in een subquery (met behulp van een gecorreleerde subquery zoals in uw voorbeeld). Het telt dan de rijen waar de voorwaarden waar zijn:
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;
Deze zoekopdracht is duurder dan de jouwe. Je was in staat om een mooie gelijkheidsvoorwaarde te gebruiken op de order
kolom. Hier is een sortering nodig met de limit
om de volgende waarde te krijgen. Een samengestelde index op (order, area)
zou de prestaties moeten helpen.