Да приемем, че има уникална колона с id и за да направим нещата интересни, тя не проследява увеличенията в колоната с времеви клейма. Също така приемете, че няма равни времеви отпечатъци.
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;
Обяснение:s1 предоставя двойки времена, които са преди и след едно друго. pn ги групира, за да получи списък на всички съседни двойки времена. pt предоставя останалите колони за предишния път в pn, а nt предоставя останалите колони за следващия път. Когато колоната, която нарекох ncol, превключва стойности, предишният ред се изплюва в набора от резултати. Ако има множество ненулеви стойности и беше интересно само да се намерят превключвателите между нула и ненула, тогава променете pt.ncol!=nt.ncol на isnull(pt.ncol)!=isnull(nt.ncol).