22,209
社区成员
发帖
与我相关
我的任务
分享
select t2.ID,t2.TIME1,t2.TIME2.t1.NUM as before, t2.NUM as [after] from
(
select * ,ROW_NUMBER() over (partition by ID order by TIME2,TIME1) as rn
from Table1
) t1 inner join
(
select * ,ROW_NUMBER() over (partition by ID order by TIME2,TIME1) as rn
from Table1
) t2 on t1.rn+1=t2.rn
;WITH CTE AS(
SELECT ROW_NUMBER()OVER(ORDER BY TIME1)RN,* FROM TB
)
SELECT T1.ID,T1.TIME1,T1.TIME2,T2.NUM before,T1.NUM after FROM CTE T1 LEFT JOIN CTE T2 ON T1.RN=T2.RN+1 WHERE T2.ID IS NOT NULL
if object_id('[T1]') is not null drop table [T1]
create table [T1] (ID varchar(1),TIME1 numeric(3,1),TIME2 numeric(4,2),NUM int)
insert into [T1]
select 'A',11.4,11.20,1000 union all
select 'A',11.5,11.20,800 union all
select 'A',11.6,11.20,2000 union all
select 'A',11.7,11.20,600
select * from [T1]
SELECT A.id,A.time1,A.time2,B.num AS [before],a.num AS [after]
FROM T1 A
inner JOIN T1 B ON A.time1 -0.1 = B.time1
/*
id time1 time2 before after
A 11.5 11.20 1000 800
A 11.6 11.20 800 2000
A 11.7 11.20 2000 600*/