La tua domanda originale è piuttosto intelligente. Ecco un approccio leggermente diverso. Ottiene l'area successiva in una sottoquery (usando una sottoquery correlata come nel tuo esempio). Quindi conta le righe in cui le condizioni sono vere:
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;
Questa query è più costosa della tua. Sei stato in grado di utilizzare una buona condizione di uguaglianza sull'order
colonna. Qui è necessario un ordinamento con il limit
per ottenere il valore successivo. Un indice composito su (order, area)
dovrebbe aiutare le prestazioni.