0

私はこのテーブルを持っています

User | days
A    | 1
A    | 1   
A    | 2
B    | 2
B    | 5

そして、私はしたいです

User | difference_in_day
A    | 0
A    | 1   
B    | 3

自己結合を行う必要があると思いますが、行を次の行とのみ比較する方法がわかりません。

この条件で最初のテーブルに行位置を追加する必要がありますか? :

WHERE  a.row_position+1=b.row_position 
4

1 に答える 1

0

してみてください:

;with T as(
    select *, ROW_NUMBER() over (order by User, Days) Rnum from YourTable
)
select 
    distinct a.User, 
    b.Days-a.Days difference_in_day 
from T a left join T b on a.Rnum=b.Rnum-1 
where b.User is not null

サンプル

declare @tbl as table(xUser nvarchar(1), xDays int)
insert into @tbl values 
('A', 1),
('A', 1),
('A', 2),
('B', 2),
('B', 5)

select *, ROW_NUMBER() over (order by xUser, xDays) Rnum from @tbl

;with T as(
    select *, ROW_NUMBER() over (order by xUser, xDays) Rnum from @tbl
)
select 
    distinct a.xUser, 
    b.xDays-a.xDays difference_in_day 
from T a left join T b on a.Rnum=b.Rnum-1 
where b.xUser is not null
于 2013-05-02T10:55:35.547 に答える