sql >> Database >  >> RDS >> Sqlserver

TSQL-query om naar vorige rijen te verwijzen

Voor SQL Server 2012+:

U kunt de LAG gebruiken functie.

Hier is een voorbeeld om de eerder ontvangen waarde te vinden, dan zouden de andere natuurlijk vrijwel hetzelfde zijn.

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

Anders

Ik was al goed bezig met dit antwoord voordat je een opmerking maakte, dus ik ging er gewoon mee door.

U moet een CTE gebruiken en deze tegen zichzelf voegen met de verschuiving van het rijnummer waarnaar u op zoek bent.

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. mysql hoe de 2e hoogste waarde te krijgen met groep door en in een linker join

  2. Maak verbinding met ONLINE MySQL-database met behulp van DSN ODBC

  3. Werk een kolom van dezelfde tabel bij als er dubbele records zijn

  4. Many2many-veld invullen (odoo 8)