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 .