복붙노트

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

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

    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
    
  3. from https://stackoverflow.com/questions/6299950/sql-difference-between-rows by cc-by-sa and MIT license