Giả sử có một cột id duy nhất và để làm cho điều thú vị là nó không theo dõi sự gia tăng trong cột dấu thời gian. Cũng giả sử rằng không có dấu thời gian nào bằng nhau.
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;
Giải thích:s1 cung cấp các cặp thời gian đứng trước và sau nhau. pn nhóm chúng để có được danh sách tất cả các cặp thời gian liền kề. pt cung cấp phần còn lại của các cột cho lần trước trong pn và nt cung cấp phần còn lại của các cột cho lần tiếp theo. Khi cột mà tôi đặt tên là ncol chuyển đổi các giá trị, hàng trước đó sẽ được đưa vào tập kết quả. Nếu có nhiều giá trị khác rỗng và chỉ thú vị khi tìm thấy các nút chuyển giữa null và không rỗng, thì hãy thay đổi pt.ncol! =Nt.ncol thành isnull (pt.ncol)! =Isnull (nt.ncol).