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

Làm thế nào để nhận giá trị hàng trước đó và hiện tại bằng cách sử dụng CTE đệ quy?

Điều này giả định giá trị ID ngày càng tăng và sẽ giải quyết những khoảng trống trong ID

SELECT
   ID, 
   This.Number AS CurrentValue, 
   Prev2.Number AS PreviousValue
FROM
   myTable This
   OUTER APPLY
   (
    SELECT TOP 1
       Number
    FROM
       myTable Prev
    WHERE
       Prev.ID < This.ID  -- change to number if you want
    ORDER BY
       Prev.ID DESC
   ) Prev2;

HOẶC

WITH CTE
     AS (SELECT ID,
                Number,
                ROW_NUMBER() OVER (ORDER BY ID) AS rn
         FROM   Mytable)
SELECT ID,
       This.Number AS CurrentValue,
       Prev.Number AS PreviousValue
FROM   CTE This
       LEFT JOIN CTE Prev
         ON Prev.rn + 1 = This.rn; 

Và đối với SQL Server 2012

SELECT
   ID,
   Number AS CurrentValue,
   LAG(Number) OVER (ORDER BY ID) AS PreviousValue
FROM
   MyTable



  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 để mã hóa các ký tự ngôn ngữ cụ thể trong khi chuyển đổi varbinary () thành varchar (max) trong SQL Server 2012?

  2. tính toán số lượng cổ phiếu đóng cửa, giá cả và giá trị bằng FIFO

  3. SQL Server Management Studio - Thêm / Di chuyển các Cột yêu cầu thả và tạo lại?

  4. Cách tạo bảng lịch có ngày tháng bắt đầu và ngày tháng kết thúc

  5. Cách xóa các bản sao khỏi một chuỗi trong SQL