sql >> Database >  >> RDS >> Sqlserver

Hoe de vorige en huidige rijwaarde te krijgen met behulp van recursieve CTE?

Dit veronderstelt toenemende ID-waarden en zal hiaten in ID opvangen

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;

OF

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; 

En voor SQL Server 2012

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



  1. ElasticSearch rivier JDBC MySQL verwijdert geen records

  2. SQL Geneste Query traag met IN

  3. PostgreSQL in Docker - pg_hba.conf om toegang van host tot container toe te staan

  4. Hoe kolommen correct samen te voegen met T-SQL?