आपकी मूल क्वेरी बल्कि चतुर है। यहाँ थोड़ा अलग दृष्टिकोण है। यह एक सबक्वायरी में अगला क्षेत्र प्राप्त करता है (आपके उदाहरण में एक सहसंबद्ध सबक्वेरी का उपयोग करके)। इसके बाद यह उन पंक्तियों को गिनता है जहां शर्तें सही हैं:
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)
. पर एक समग्र अनुक्रमणिका प्रदर्शन में मदद करनी चाहिए।