Dies ist eine Art Lücken-und-Inseln-Problem. Inseln sind benachbarte Zeilen, die dieselbe batchnum
haben , und Sie möchten den Anfang jeder Insel.
Der einfachste Ansatz ist hier wahrscheinlich lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Beachten Sie, dass dies MySQL 8.0 erfordert. In früheren Versionen verwendet eine Alternative eine korrelierte Unterabfrage:
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
)
Hier ist eine Demo zu DB Fiddle .