Това е един вид проблем с пропуските и островите. Островите са съседни редове, които имат същия batchnum
, и искате началото на всеки остров.
Тук най-простият подход вероятно е lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Имайте предвид, че това изисква MySQL 8.0. В по-ранните версии една алтернатива използва корелирана подзаявка:
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
)
Ето демо на DB Fiddle .