Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecionando a linha 'próxima' com critérios específicos no MySQL


Sua consulta original é bastante inteligente. Aqui está uma abordagem um pouco diferente. Ele obtém a próxima área em uma subconsulta (usando uma subconsulta correlacionada como no seu exemplo). Em seguida, ele conta as linhas em que as condições são verdadeiras:
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;

Esta consulta é mais cara que a sua. Você conseguiu usar uma boa condição de igualdade na order coluna. Aqui, uma classificação é necessária com o limit para obter o próximo valor. Um índice composto em (order, area) deve ajudar no desempenho.