SQL Find difference between previous and current row

后端 未结 3 1838
太阳男子
太阳男子 2020-12-06 05:12

I am trying to find the difference between the current row and the previous row. However, I am getting the following error message:

The multi-part id

相关标签:
3条回答
  • 2020-12-06 05:58

    I don't think you need the partition by statement:

    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;
    

    If you do need it, you should put in a column name as opposed to a table name.

    0 讨论(0)
  • 2020-12-06 06:02

    If you in SQL Server 2012+ You can use LAG.

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

    Note: The optional third parameter of LAG is:

    default

    The value to return when scalar_expression at offset is NULL. If a default value is not specified, NULL is returned. default can be a column, subquery, or other expression, but it cannot be an analytic function. default must be type-compatible with scalar_expression.

    0 讨论(0)
  • 2020-12-06 06:07

    See 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
    
    0 讨论(0)
提交回复
热议问题