Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybór „następnego” wiersza z uwzględnieniem określonych kryteriów w MySQL

Twoje oryginalne zapytanie jest dość sprytne. Oto nieco inne podejście. Pobiera następny obszar w podzapytaniu (używając skorelowanego podzapytania, jak w twoim przykładzie). Następnie liczy wiersze, w których warunki są spełnione:

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;

To zapytanie jest droższe niż Twoje. Udało Ci się użyć ładnego warunku równości w order kolumna. Tutaj potrzebne jest sortowanie z limit aby uzyskać następną wartość. Złożony indeks na (order, area) powinien pomóc w wydajności.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw zapytanie, aby wstawić wiersze w MySQL

  2. Szyfrowanie w spoczynku i/lub AES_ENCRYPT

  3. Jak pominąć kolumny w pliku CSV podczas importu do tabeli MySQL za pomocą funkcji LOAD DATA INFILE?

  4. Ustawianie wartości kolumn jako nazw kolumn w wyniku zapytania SQL

  5. Co to jest indeks pełnotekstowy i kiedy należy go używać?