Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tham chiếu các giá trị hàng tiếp theo và trước đó

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).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để đặt dấu gạch ngược vào tên cột được gọi là khóa cho chế độ ngủ đông

  2. Bảng tổng hợp MySQL sử dụng java

  3. Thay đổi bảng bằng cách sử dụng lựa chọn phụ

  4. Kết nối MySQL ném tham chiếu rỗng

  5. sao chép một cột từ bảng này sang bảng khác