sql >> Database >  >> RDS >> Mysql

De 'volgende' rij selecteren met specifieke criteria in MySQL

Je oorspronkelijke vraag is nogal slim. Hier is een iets andere benadering. Het krijgt het volgende gebied in een subquery (met behulp van een gecorreleerde subquery zoals in uw voorbeeld). Het telt dan de rijen waar de voorwaarden waar zijn:

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;

Deze zoekopdracht is duurder dan de jouwe. Je was in staat om een ​​mooie gelijkheidsvoorwaarde te gebruiken op de order kolom. Hier is een sortering nodig met de limit om de volgende waarde te krijgen. Een samengestelde index op (order, area) zou de prestaties moeten helpen.




  1. MySQL corrumpeert na elke herstart van de server

  2. Aandacht besteden aan schattingen

  3. Records groeperen van while-lus | PHP

  4. Hardgecodeerde mysql-gebruiker en wachtwoord in Node.js