복붙노트

[SQL] 이전과 현재 행의 차이를 찾기 SQL은

SQL

이전과 현재 행의 차이를 찾기 SQL은

나는 현재 행과 이전 행의 차이를 찾기 위해 노력하고있다. 그러나, 나는 다음과 같은 오류 메시지가 무엇입니까 :

방법을 잘 모르 오류를 수정합니다.

감사!

출력은 다음과 같아야합니다 :

columnOfNumbers     Difference
      1               NULL
      2               1
      3               1
      10              7
      12              2
      ....            ....

암호:

USE DATABASE;

WITH CTE AS 
(SELECT 
    ROW_NUMBER() OVER (PARTITION BY tableName ORDER BY columnOfNumbers) ROW,
    columnOfNumbers
    FROM tableName)
SELECT
    a.columnOfNumbers
FROM
    CTE a
    LEFT JOIN CTE b
    ON a.columnOfNumbers = b.columnOfNumbers AND a.ROW = b.ROW + 1

해결법

  1. ==============================

    1.참조 sqlFiddle

    참조 sqlFiddle

    ;WITH tblDifference AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY id) AS RowNumber, columnOfNumbers 
        FROM tableName
    )
    
    SELECT cur.columnOfNumbers, cur.columnOfNumbers - previous.columnOfNumbers
    FROM tblDifference cur
    LEFT OUTER JOIN tblDifference previous
    ON cur.RowNumber = previous.RowNumber + 1
    
  2. ==============================

    2.SQL Server의 당신이 경우 2012+ 당신은 LAG를 사용할 수 있습니다.

    SQL Server의 당신이 경우 2012+ 당신은 LAG를 사용할 수 있습니다.

     SELECT columnOfNumbers
           ,columnOfNumbers - LAG(columnOfNumbers, 1) OVER (ORDER BY columnOfNumbers)
       FROM tableName
    

    참고 : LAG의 세번째 매개 변수는 다음과 같습니다

  3. ==============================

    3.나는 당신이 문으로 파티션을 필요가 있다고 생각하지 않습니다 :

    나는 당신이 문으로 파티션을 필요가 있다고 생각하지 않습니다 :

    WITH CTE AS (
          SELECT ROW_NUMBER() OVER (ORDER BY columnOfNumbers) as ROW,
                 columnOfNumbers
          FROM tableName
         )
    SELECT a.columnOfNumbers, a.columnOfNumbers - b.columnOfNumbers
    FROM CTE a LEFT JOIN
         CTE b
         ON a.ROW = b.ROW + 1;
    

    당신이 그것을 필요로 할 경우 테이블 이름에 반대, 당신은 열 이름에 넣어해야합니다.

  4. from https://stackoverflow.com/questions/23200189/sql-find-difference-between-previous-and-current-row by cc-by-sa and MIT license