2013-05-02 65 views
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 
+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 

樣本? – paul 2013-05-02 10:46:28

+0

我正在使用Microsoft Sql Server – Ricol 2013-05-02 10:49:41

+0

如果您將一行與下一行進行比較,那麼您將依賴按特定順序傳輸的數據。你可以使用表中的ID字段或SortBy字段嗎?如果不是,那麼當您重新運行查詢時,您不能假定訂單將相同。 – 2013-05-02 10:54:13

回答

0

請嘗試:

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