sql >> Databasteknik >  >> RDS >> Sqlserver

TSQL-fråga för att referera till tidigare rader

För SQL Server 2012+:

Du kan använda LAG funktion.

Här är ett exempel för att hitta det tidigare mottagna värdet, då skulle de andra naturligtvis vara ganska lika.

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

Annars

Jag var redan väl in i det här svaret innan du kommenterade tillbaka, så jag fortsatte med det.

Du måste använda en CTE och koppla den mot sig själv med radnummerförskjutningen som du letar efter.

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. utländsk nyckel och indexfråga

  2. Kontrollera förekomsten av varje tecken i en sträng med en annan sträng i SQL

  3. MySQL slå samman många till många en rad

  4. Senaste x blogginlägg - men bara en gång per användare