Mysql
 sql >> Database >  >> RDS >> Mysql

Selezionando la riga "successiva" in base a criteri specifici in MySQL

La tua domanda originale è piuttosto intelligente. Ecco un approccio leggermente diverso. Ottiene l'area successiva in una sottoquery (usando una sottoquery correlata come nel tuo esempio). Quindi conta le righe in cui le condizioni sono vere:

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;

Questa query è più costosa della tua. Sei stato in grado di utilizzare una buona condizione di uguaglianza sull'order colonna. Qui è necessario un ordinamento con il limit per ottenere il valore successivo. Un indice composito su (order, area) dovrebbe aiutare le prestazioni.