Đây là một dạng vấn đề về khoảng cách và các đảo. Quần đảo là các hàng liền kề có cùng batchnum
và bạn muốn điểm bắt đầu của mỗi hòn đảo.
Ở đây, cách tiếp cận đơn giản nhất có lẽ là lag()
:
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
Lưu ý rằng điều này yêu cầu MySQL 8.0. Trong các phiên bản trước, một phương án thay thế sử dụng truy vấn con tương quan:
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
)
Đây là bản trình diễn trên DB Fiddle .