[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.참조 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.SQL Server의 당신이 경우 2012+ 당신은 LAG를 사용할 수 있습니다.
SQL Server의 당신이 경우 2012+ 당신은 LAG를 사용할 수 있습니다.
SELECT columnOfNumbers ,columnOfNumbers - LAG(columnOfNumbers, 1) OVER (ORDER BY columnOfNumbers) FROM tableName
참고 : LAG의 세번째 매개 변수는 다음과 같습니다
-
==============================
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;
당신이 그것을 필요로 할 경우 테이블 이름에 반대, 당신은 열 이름에 넣어해야합니다.
from https://stackoverflow.com/questions/23200189/sql-find-difference-between-previous-and-current-row by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 쉼표 하나의 열 값을 분리 - SQL SERVER를 (0) | 2020.07.10 |
---|---|
[SQL] XML 데이터 형식 방법 "값"의 인수 하나는 문자열 리터럴이어야합니다 (0) | 2020.07.10 |
[SQL] # 1366 - 잘못된 정수 값 : MYSQL (0) | 2020.07.10 |
[SQL] MM : HH에 DATEDIFF SS 형식 (0) | 2020.07.10 |
[SQL] 거래-SQL 속기는 조인 구문을? (0) | 2020.07.10 |