Mysql
 sql >> база данни >  >> RDS >> Mysql

Избиране на "следващия" ред при определени критерии в MySQL

Оригиналното ви запитване е доста умно. Тук има малко по-различен подход. Той получава следващата област в подзаявка (използвайки корелирана подзаявка, както е във вашия пример). След това преброява редовете, където условията са верни:

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;

Тази заявка е по-скъпа от вашата. Успяхте да използвате хубаво условие за равенство в order колона. Тук е необходимо сортиране с limit за да получите следващата стойност. Съставен индекс на (order, area) би трябвало да помогне на производителността.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете(лимит) списък в Groupby в Entity Framework

  2. Защо редът с най-нисък идентификатор винаги се връща, когато се връща и MAX стойност за колона?

  3. Максимален брой работещи таблици в SQL Server и MySQL

  4. Как да използвате FIND_IN_SET с помощта на списък с данни

  5. Моите MySQL сървърни връзки криптирани и безопасни ли са?