select ROW_NUMBER() over(order by dates,number) id,dates,number,price,convert(decimal(18,2),0.00) as diff,' ' as new_number into #temp from mytable
declare @number int,@price decimal(18,2)
set @number=(select max(id) from #temp)
while @number>1
begin
set @price=(select price from #temp where id=@number-1)
update #temp
set diff=price-@price
,new_number=convert(varchar(2),number)+'-'+convert(varchar(2),number-1)
where id=@number
set @number=@number-1
end
select * from #temp
id dates number price diff new_number
-------------------- -------------------------------------------------- ----------- --------------------------------------- ---------------------------------
1 20130101 1 3.33 0.00
2 20130101 2 3.45 0.12 2-1
3 20130101 3 3.45 0.00 3-2
4 20130101 4 3.30 -0.15 4-3
5 20130102 1 4.33 1.03 1-0
6 20130102 2 4.45 0.12 2-1
7 20130102 3 4.35 -0.10 3-2
8 20130102 4 4.30 -0.05 4-3
select dates,new_number,case when diff<0 then 2 when diff>0 then 1 when diff=0 then 0 end as diff from #temp where number!=1
dates new_number diff
-------------------------------------------------- ---------- -----------
20130101 2-1 1
20130101 3-2 0
20130101 4-3 2
20130102 2-1 1
20130102 3-2 2
20130102 4-3 2