sql >> Databasteknik >  >> RDS >> Mysql

Att välja "nästa" rad givet specifika kriterier i MySQL

Din ursprungliga fråga är ganska smart. Här är ett lite annorlunda tillvägagångssätt. Den får nästa område i en underfråga (med hjälp av en korrelerad underfråga som i ditt exempel). Den räknar sedan raderna där villkoren är sanna:

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;

Den här frågan är dyrare än din. Du kunde använda ett trevligt likhetsvillkor på order kolumn. Här behövs en sortering med limit för att få nästa värde. Ett sammansatt index på (order, area) bör hjälpa prestanda.




  1. Naturlig sort som stöder stora siffror

  2. EclipseLink kan inte hämta ett skalärt booleskt värde

  3. Returnera det aktuella arbetsstationsnamnet som är anslutet till SQL Server (T-SQL)

  4. Hur får jag det senast infogade ID:t för en MySQL-tabell i PHP?