Permintaan asli Anda agak pintar. Berikut adalah pendekatan yang sedikit berbeda. Itu mendapatkan area berikutnya dalam subquery (menggunakan subquery yang berkorelasi seperti pada contoh Anda). Kemudian menghitung baris di mana kondisinya benar:
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;
Permintaan ini lebih mahal dari milik Anda. Anda dapat menggunakan kondisi kesetaraan yang bagus pada order
kolom. Di sini, pengurutan diperlukan dengan limit
untuk mendapatkan nilai selanjutnya. Indeks gabungan pada (order, area)
akan membantu kinerja.