Toto je druh problému mezer a ostrovů. Ostrovy jsou sousední řádky, které mají stejné batchnum
a chcete začátek každého ostrova.
Zde je pravděpodobně nejjednodušší přístup lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Všimněte si, že to vyžaduje MySQL 8.0. V dřívějších verzích jedna alternativa používá korelovaný poddotaz:
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
)
Zde je demo na DB Fiddle .