Questa è una specie di problema di lacune e isole. Le isole sono righe adiacenti che hanno lo stesso batchnum
e vuoi l'inizio di ogni isola.
Qui, l'approccio più semplice è probabilmente lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Nota che questo richiede MySQL 8.0. Nelle versioni precedenti, un'alternativa utilizza una sottoquery correlata:
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
)
Ecco una demo su DB Fiddle .