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

Valg af 'næste' række givet specifikke kriterier i MySQL

Din oprindelige forespørgsel er ret smart. Her er en lidt anden tilgang. Den får det næste område i en underforespørgsel (ved hjælp af en korreleret underforespørgsel som i dit eksempel). Den tæller derefter rækkerne, hvor betingelserne er sande:

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;

Denne forespørgsel er dyrere end din. Du var i stand til at bruge en god lighedsbetingelse på order kolonne. Her er en sortering nødvendig med limit for at få den næste værdi. Et sammensat indeks på (order, area) skal hjælpe med ydeevnen.




  1. Databasen eksisterer, men returnerer en fejl, der siger Ukendt database

  2. brug af rownum-funktionen med> log ind oracle

  3. PyMySQL forskellige opdateringer i én forespørgsel?

  4. Den version af SQL Server, der er i brug, understøtter ikke datatypen datetime2?