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
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.
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.
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