5
name      point
----------
steve     207
Mary      203
steve     205
steve     200
steve     139
Mary      300

name = steve という条件 eqn = [ (row + 1) - row] の行の差を取得したいので、理想的には、

steve 2   //207 - 0
steve 5   //205 - 207
steve 61  //200 - 205
steve 139 //139 - 200

連続する行の違いを見つけるために使用できるコードがあります。ただし、条件を追加すると機能しません。

4

1 に答える 1

6

編集されたOPコメントのため、リクエストに正確に一致するようにクエリを変更しました。

LAGは次のことに役立ちます。

  select name, 
    coalesce( 
        point - lag( point , 1, Null ) over (order by point),
        point)
    as diff,
    point || '-' ||
    LEAD( point , 1, 0 ) over (order by point) as prev_point
  from t   
  where name = 'steve'  
  order by point desc

結果

|  NAME | DIFF | PREV_POINT |
-----------------------------
| steve |    2 |      207-0 |
| steve |    5 |    205-207 |
| steve |   61 |    200-205 |
| steve |  139 |    139-200 |
于 2012-11-11T19:25:28.433 に答える