Asumsikan ada kolom id unik dan untuk membuat hal-hal menarik tidak melacak peningkatan kolom cap waktu. Juga asumsikan bahwa tidak ada stempel waktu yang sama.
select pt.* from
(Select max(ptime) as prevtime,min(ntime) as nextime from
((Select timestamp as ptime) as prev,
(Select timestamp as ntime) as next
where prev.ptime < next.ntime and prev.id<>next.id) as s1 group by ptime, ntime) as pn
inner join
t as pt on pn.prevtime=pt.timestamp inner join
t as nt on pn.nexttime=nt.timestamp
where pt.ncol!=nt.ncol;
Penjelasan:s1 menyediakan pasangan waktu yang sebelum dan sesudah satu sama lain. pn mengelompokkan mereka untuk mendapatkan daftar semua pasangan waktu yang berdekatan. pt menyediakan sisa kolom untuk waktu sebelumnya di pn, dan nt menyediakan sisa kolom untuk waktu berikutnya. Ketika kolom yang saya beri nama ncol mengganti nilai, baris sebelumnya dimuntahkan ke dalam hasil. Jika ada beberapa nilai nonnull dan hanya menarik untuk menemukan peralihan antara null dan non-null, maka ubah pt.ncol!=nt.ncol menjadi isnull(pt.ncol)!=isnull(nt.ncol).