यह एक तरह की गैप्स-एंड-आइलैंड समस्या है। द्वीप समीपवर्ती पंक्तियाँ हैं जिनमें समान 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 पर डेमो ।