Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswahl der 'nächsten' Zeile nach bestimmten Kriterien in MySQL

Ihre ursprüngliche Abfrage ist ziemlich clever. Hier ist ein etwas anderer Ansatz. Es erhält den nächsten Bereich in einer Unterabfrage (unter Verwendung einer korrelierten Unterabfrage wie in Ihrem Beispiel). Anschließend werden die Zeilen gezählt, in denen die Bedingungen wahr sind:

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;

Diese Abfrage ist teurer als Ihre. Sie konnten eine schöne Gleichheitsbedingung für die order verwenden Säule. Hier wird eine Sortierung mit dem limit benötigt um den nächsten Wert zu erhalten. Ein zusammengesetzter Index für (order, area) sollte die Leistung verbessern.