Dette er en slags huler-og-øer-problem. Øer er tilstødende rækker, der har det samme batchnum
, og du vil have starten på hver ø.
Her er den enkleste fremgangsmåde sandsynligvis lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Bemærk, at dette kræver MySQL 8.0. I tidligere versioner bruger et alternativ en korreleret underforespørgsel:
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
)
Her er en demo på DB Fiddle .