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

Wybierz przy zmianie wartości

Jest to rodzaj problemu z lukami i wyspami. Wyspy to sąsiednie wiersze, które mają ten sam batchnum i chcesz rozpocząć każdą wyspę.

Tutaj najprostszym podejściem jest prawdopodobnie lag() :

select *
from (
    select e.*,
        lag(batchnum) over(order by time) lag_batchnum
    from example e
) e
where not lag_batchnum <=> batchnum

Zauważ, że wymaga to MySQL 8.0. We wcześniejszych wersjach jedna alternatywa używa skorelowanego podzapytania:

select e.*
from example e
where not batchnum <=> (
    select e1.batchnum
    from example e1
    where e1.time < e.time
    order by e1.time desc
    limit 1
)

Oto demo na DB Fiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL 2006:serwer mysql zniknął

  2. Czy mam mysql_real_escape_string hasło wpisane w formularzu rejestracyjnym?

  3. niezainicjowana stała Mysql2::Client::SECURE_CONNECTION

  4. Porównanie dat mysql z formatem date_format

  5. aplikacja zawiesza się na JSON jparser, aby wykonać żądanie http