これは一種のギャップと島の問題です。島は、同じbatchnum
を持つ隣接する行です 、そしてあなたは各島の始まりを望んでいます。
ここで、最も単純なアプローチはおそらくlag()
です。 :
select *
from (
select e.*,
lag(batchnum) over(order by time) lag_batchnum
from example e
) e
where not lag_batchnum <=> batchnum
これにはMySQL8.0が必要であることに注意してください。以前のバージョンでは、1つの代替手段が相関サブクエリを使用します:
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
)
これが