sql >> Base de Datos >  >> RDS >> Mysql

Seleccionar la fila 'siguiente' dados criterios específicos en MySQL

Su consulta original es bastante inteligente. Aquí hay un enfoque ligeramente diferente. Obtiene la siguiente área en una subconsulta (usando una subconsulta correlacionada como en su ejemplo). Luego cuenta las filas donde las condiciones son verdaderas:

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 es más cara que la tuya. Pudiste usar una buena condición de igualdad en el order columna. Aquí, se necesita una ordenación con el limit para obtener el siguiente valor. Un índice compuesto en (order, area) debería ayudar al rendimiento.