Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélection de la ligne "suivante" en fonction de critères spécifiques dans MySQL

Votre requête initiale est plutôt intelligente. Voici une approche légèrement différente. Il obtient la zone suivante dans une sous-requête (en utilisant une sous-requête corrélée comme dans votre exemple). Il compte ensuite les lignes où les conditions sont vraies :

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;

Cette requête est plus chère que la vôtre. Vous avez pu utiliser une belle condition d'égalité sur la order colonne. Ici, un tri est nécessaire avec la limit pour obtenir la valeur suivante. Un index composite sur (order, area) devrait améliorer les performances.