Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione na mudança de valor


Este é um tipo de problema de lacunas e ilhas. As ilhas são linhas adjacentes que têm o mesmo batchnum , e você quer o início de cada ilha.

Aqui, a abordagem mais simples é provavelmente lag() :
select *
from (
    select e.*,
        lag(batchnum) over(order by time) lag_batchnum
    from example e
) e
where not lag_batchnum <=> batchnum

Observe que isso requer o MySQL 8.0. Em versões anteriores, uma alternativa usa uma subconsulta correlacionada:
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
)

Aqui está uma demonstração no DB Fiddle .