sql >> Databáze >  >> RDS >> Sqlserver

Jak získat předchozí a aktuální hodnotu řádku pomocí rekurzivního CTE?

To předpokládá zvýšení hodnot ID a vypořádá se s mezerami v ID

SELECT
   ID, 
   This.Number AS CurrentValue, 
   Prev2.Number AS PreviousValue
FROM
   myTable This
   OUTER APPLY
   (
    SELECT TOP 1
       Number
    FROM
       myTable Prev
    WHERE
       Prev.ID < This.ID  -- change to number if you want
    ORDER BY
       Prev.ID DESC
   ) Prev2;

NEBO

WITH CTE
     AS (SELECT ID,
                Number,
                ROW_NUMBER() OVER (ORDER BY ID) AS rn
         FROM   Mytable)
SELECT ID,
       This.Number AS CurrentValue,
       Prev.Number AS PreviousValue
FROM   CTE This
       LEFT JOIN CTE Prev
         ON Prev.rn + 1 = This.rn; 

A pro SQL Server 2012

SELECT
   ID,
   Number AS CurrentValue,
   LAG(Number) OVER (ORDER BY ID) AS PreviousValue
FROM
   MyTable



  1. java.sql.SQLException:Po uzavření připojení nejsou povoleny žádné operace

  2. Přehled parametrů připojení PostgreSQL 13 libpq sslpassword

  3. Umístění dočasné tabulky MySQL

  4. PostgreSQL:Vytvořte index podle délky všech polí tabulky