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. 宣言されていないプレフィックスを持つ SQL Server Xml クエリ

    2. MySQLブロブを確実に復元する方法

    3. このIPから場所へのルックアップクエリを最適化する方法は?

    4. アカウントの累積合計を計算するためのPHPスクリプト