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

So sánh hàng hiện tại với hàng trước trong SQL Server

Bạn có thể sử dụng truy vấn sau:

SELECT RaidNo, OutComeID, RN,
       CASE 
          WHEN OutComeID <> 16 THEN 0
          ELSE ROW_NUMBER() OVER (PARTITION BY OutComeID, grp ORDER BY RN) 
       END AS Result
FROM (
   SELECT RaidNo, OutComeID, RN,
          RN - ROW_NUMBER() OVER (PARTITION BY OutComeID ORDER BY RN) AS grp
   FROM mytable) AS t
ORDER BY RN

Trường grp xác định các lát (còn gọi là đảo) của các bản ghi liên tiếp có cùng OutComeID giá trị. Truy vấn bên ngoài sử dụng grp để liệt kê từng bản ghi thuộc về '16' lát cắt. Các bản ghi thuộc về các phần khác được gán giá trị 0 .

Demo tại đây




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bao gồm các tháng bị thiếu trong truy vấn Nhóm Theo

  2. SQL Server:Cách thực hiện Rtrim trên tất cả các cột varchar của bảng

  3. Sự cố chuyển đổi kiểu SQL Server lạ

  4. xác định bộ ký tự của một bảng / cơ sở dữ liệu?

  5. Ngày lấy lại mặc định cho Chèn ngày