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

TSQL Truy vấn để tham chiếu các hàng trước đó

Đối với SQL Server 2012+:

Bạn có thể sử dụng LAG chức năng.

Đây là một ví dụ để tìm giá trị đã nhận trước đó, tất nhiên những giá trị khác sẽ khá giống nhau.

SELECT      TOP 5 
            ReceivedYTD, 
            InvoicedYTD, 
            OrderedYTD, 
            YearReported, 
            WeekReported,

-- Relevant part
            LAG(ReceivedYTD)
                OVER (ORDER BY YearReported DESC, WeekReported DESC) AS PreviousReceivedYTD
-- End relevant part

FROM        Products 
WHERE       ProductId = @ProductId
ORDER BY    YearReported DESC, 
            WeekReported DESC

Nếu không

Tôi đã hiểu rõ câu trả lời này trước khi bạn nhận xét lại, vì vậy tôi chỉ tiếp tục với nó.

Bạn phải sử dụng một CTE và kết hợp nó với chính nó bằng phần bù số hàng mà bạn đang tìm kiếm.

WITH CTE AS (
    SELECT      TOP 5 
                RowNumber = ROW_NUMBER() OVER (ORDER BY YearReported DESC, WeekReported DESC)

                ReceivedYTD, 
                InvoicedYTD, 
                OrderedYTD, 
                YearReported, 
                WeekReported,
    FROM        Products 
    WHERE       ProductId = @ProductId
    ORDER BY    YearReported DESC, 
                WeekReported DESC
)

SELECT   CTE.ReceivedYTD, 
         CTE.InvoicedYTD, 
         CTE.OrderedYTD, 
         CTE.YearReported,
         CTE.WeekReported,
         PreviousRow.ReceivedYTD AS PreviousReceivedYTD
FROM CTE
    LEFT OUTER JOIN CTE PreviousRow ON CTE.RowNumber - 1 = PreviousRow.RowNumber


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể chuyển đối số tới trình kích hoạt SQL Server bên ngoài (CLR) không?

  2. Truy vấn hiệu quả để tách một cột được phân tách thành một bảng riêng biệt

  3. SQL - downcast BIGINT về INT một cách an toàn

  4. Làm cách nào để bạn thêm một cột KHÔNG ĐẦY ĐỦ PHÍM NGOÀI vào bảng hiện có (được điền) trong MS SQL?

  5. Phân tích MS SQL Server cho những người lần đầu tiên nhìn thấy nó