Stel dat er een unieke id-kolom is en om het interessant te maken, wordt de toename in de tijdstempelkolom niet bijgehouden. Neem ook aan dat er geen tijdstempels zijn die gelijk zijn.
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;
Uitleg:s1 geeft paren tijden die voor en na elkaar liggen. pn groepeert ze om een lijst te krijgen van alle aangrenzende paren tijden. pt levert de rest van de kolommen voor de vorige keer in pn, en nt levert de rest van de kolommen voor de volgende keer. Wanneer de kolom die ik ncol noemde, van waarde verandert, wordt de vorige rij in de resultatenset uitgespuugd. Als er meerdere niet-null-waarden zijn en het alleen interessant was om de schakelaars tussen null en niet-null te vinden, verander dan pt.ncol!=nt.ncol in isnull(pt.ncol)!=isnull(nt.ncol).