Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите стойност на предишен и текущ ред с помощта на рекурсивен CTE?

Това предполага увеличаване на стойностите на ID и ще се справи с пропуски в 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;

ИЛИ

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; 

И за SQL Server 2012

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. на ms-sql сървър, кой е най-добрият инструмент за получаване на всички зависимости между всички обекти?

  2. Тези две заявки еднакви ли са - GROUP BY срещу DISTINCT?

  3. Какво прави 'COLLATE SQL_Latin1_General_CP1_CI_AS'?

  4. Разделяне на низ със запетая в SQL Server 2008

  5. Внедряване на индикатор за производителност на SQL Server за заявки, съхранени процедури и тригери