Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie TSQL do odwoływania się do poprzednich wierszy

Dla SQL Server 2012+:

Możesz użyć LAG funkcja.

Oto przykład, jak znaleźć poprzednią otrzymaną wartość, wtedy oczywiście pozostałe będą całkiem takie same.

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

W przeciwnym razie

Byłem już dobrze zaznajomiony z tą odpowiedzią, zanim skomentowałeś, więc po prostu to zrobiłem.

Musisz użyć CTE i połączyć je ze sobą przez przesunięcie numeru wiersza, którego szukasz.

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. PHP sqlsrv_connect to SQL Server:Wystąpił błąd związany z siecią lub specyficzny dla instancji podczas nawiązywania połączenia z SQL Server

  2. Nie znaleziono bliskich odpowiedników w CONTAINSTABLE

  3. Jakie są główne różnice w wydajności między typami danych varchar i nvarchar SQL Server?

  4. Typy kursorów programu SQL Server — Statyczny kursor tylko do przodu | Samouczek SQL Server / Samouczek TSQL

  5. SQL:pisz tylko na pierwszą literę