sql >> Databáze >  >> RDS >> Mysql

Výběr „dalšího“ řádku podle specifických kritérií v MySQL

Váš původní dotaz je docela chytrý. Zde je trochu jiný přístup. Získá další oblast v poddotazu (pomocí korelovaného poddotazu jako ve vašem příkladu). Poté spočítá řádky, kde jsou podmínky splněny:

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;

Tento dotaz je dražší než váš. U order jste mohli použít pěknou podmínku rovnosti sloupec. Zde je potřeba řazení pomocí limit abyste získali další hodnotu. Složený index na (order, area) by měl pomoci výkonu.




  1. Jak INTERSECT funguje v PostgreSQL

  2. Systém značení:Otázky řešení Toxi

  3. mysql - výběr hodnot z tabulky s daným číslem sloupce

  4. SQL vybere pouze řádky s maximální hodnotou ve sloupci