Este es un tipo de problema de lagunas e islas. Las islas son filas adyacentes que tienen el mismo batchnum
, y quieres el inicio de cada isla.
Aquí, el enfoque más simple es probablemente lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Tenga en cuenta que esto requiere MySQL 8.0. En versiones anteriores, una alternativa utiliza una 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
)
Aquí hay una demostración en DB Fiddle .