Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

TSQL Query untuk mereferensikan baris sebelumnya

Untuk SQL Server 2012+:

Anda dapat menggunakan LAG fungsi.

Berikut adalah contoh untuk menemukan nilai yang diterima sebelumnya, maka tentu saja yang lain akan sama.

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

Jika tidak

Saya sudah memahami jawaban ini sebelum Anda membalas komentar, jadi saya ikuti saja.

Anda harus menggunakan CTE, dan menggabungkannya dengan offset nomor baris yang Anda cari.

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. Kapan performa Distinct dan Group By berbeda?

  2. Fungsi TRANSLATE di SQL SERVER

  3. Mengapa kesalahan terkait jaringan atau spesifik contoh terjadi saat membuat koneksi ke SQL Server?

  4. Bagaimana cara memasukkan ke dalam tabel hanya dengan satu kolom IDENTITAS?

  5. Apa yang salah dengan sp_rename dengan kolom?