[SQL] 행 사이 SQL 차이
SQL행 사이 SQL 차이
나는이 같은 SQL 2008 데이터베이스 테이블을
name score
-----------------------
steve 207
steve 205
steve 200
steve 139
나는 행 사이의 차이를 싶어. EQN = 로우 - (+ 1 행)] 그래서 이상적이 원하는 것,
steve 2 //207 - 205
steve 5 //205 - 200
steve 61 //200 - 139
steve 139 //139 - 0
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 감사!
해결법
-
==============================
1.이것은 한 가지 방법이다
이것은 한 가지 방법이다
with cte as (SELECT ROW_NUMBER() OVER (PARTITION BY table.name ORDER BY id) row, name, score FROM table) SELECT a.name , a.score - ISNULL(b.score,0) FROM cte a LEFT JOIN cte b on a.name = b.name and a.row = b.row+1
-
==============================
2.그것을 할 수있는 또 다른 방법은 () 지연을 사용하고 있습니다 :
그것을 할 수있는 또 다른 방법은 () 지연을 사용하고 있습니다 :
SELECT name, score - coalesce(lag(score) over (partition by name order by id), 0) FROM table ORDER BY name, id
래그 () 함수는 TSQL로 제공 될 것 같지 않습니다 만이 해결 방법은 의견 제안 :
select name, score - coalesce( MIN(score) OVER (PARTITION BY name ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) , 0) as diff from table order by name, id
from https://stackoverflow.com/questions/6299950/sql-difference-between-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 여러 테이블에서 INSERT INTO 표 (0) | 2020.06.27 |
---|---|
[SQL] 내가 한 번 사용 후 왜 내 CTE에 액세스 할 수 없습니다? (0) | 2020.06.27 |
[SQL] 위해 SQL 트리 계층 구조 (0) | 2020.06.26 |
[SQL] 유사한 문자열을 포함하는 SQL 기록을 찾기 (0) | 2020.06.26 |
[SQL] PostgreSQL을 다른 테이블의 컬럼이있는 테이블의 열을 업데이트 (0) | 2020.06.26 |