请教sql语句:我们要计算一个表的前一条后记录减前一条记录怎么写?在线等待,解决了马上给分

时间:2022-09-16 00:35:37
表A 
   a     
   15
   17
   19
   22
---------
 我们要得到 17-15 =2 19-17 =2  22-19怎么写SQL啊?

9 个解决方案

#1


up

#2


不知道搂主说的前一条记录这个顺序是怎么得到的
解决方法:

1:搂主的表应该有一个排序的方法,假设有一个表
Table1
(
    value int,
    insertdate datetime 
)
15,17,19,22分别是不同纪录的value值,insertdate表示值得先后顺序

1:创建一个临时表,重新对值进行排序,并新增加一个栏位自增长ID,方法为:
select identity(int,1,1) as id,value,insertdate 
into #temptable from table1 order by insertdate 
2:对临时表#temptable进行查询计算,方法为:
select convert(varchar,b.value)+'-'+Convert(varchar,a.value) as statement,
b.value-a.value as resultdate 
from #temptable as b 
left join #temptable as a on b.id= a.id+1 

这样就可以得到后一条记录减前一个的值了。

注:如果没有排序的条件。则可以直接修改原始表结果。新增加一个栏位ID,int,自增长
然后把上面的sql 语句中的临时表换为原始表就可以了

#3



如果表中數據是按這種格式排列的話,也可以不用加自增列
--建立測試環境
Create Table A
(a Int)
--插入數據
Insert A Select 15
Union All Select 17
Union All Select 19
Union All Select 22
--測試
Select 
T.a,
(T.a-(Select Top 1 a from A Where a<T.a Order By a Desc)) As 列差
from A T
--刪除測試環境
Drop Table A
--結果
/*
a 列差
15 NULL
17 2
19 2
22 3
*/

#4


楼上正解 :)

#5


学习啊,牛人~

#6


请问 T.a 中的T是临时表吗?

#7


T 不需要创建吗

#8


iec(冰冰凉) ( ) 信誉:100  2006-04-22 15:24:00  得分: 0  
 
 
   请问 T.a 中的T是临时表吗?
  
 
Top  
 iec(冰冰凉) ( ) 信誉:100  2006-04-22 15:29:00  得分: 0  
 
 
   T 不需要创建吗
  
 
Top  
-----------------------------------------------------------
看這句
from A T

T只是A表的別名,不需要另外創建。

#9


好,结题

#1


up

#2


不知道搂主说的前一条记录这个顺序是怎么得到的
解决方法:

1:搂主的表应该有一个排序的方法,假设有一个表
Table1
(
    value int,
    insertdate datetime 
)
15,17,19,22分别是不同纪录的value值,insertdate表示值得先后顺序

1:创建一个临时表,重新对值进行排序,并新增加一个栏位自增长ID,方法为:
select identity(int,1,1) as id,value,insertdate 
into #temptable from table1 order by insertdate 
2:对临时表#temptable进行查询计算,方法为:
select convert(varchar,b.value)+'-'+Convert(varchar,a.value) as statement,
b.value-a.value as resultdate 
from #temptable as b 
left join #temptable as a on b.id= a.id+1 

这样就可以得到后一条记录减前一个的值了。

注:如果没有排序的条件。则可以直接修改原始表结果。新增加一个栏位ID,int,自增长
然后把上面的sql 语句中的临时表换为原始表就可以了

#3



如果表中數據是按這種格式排列的話,也可以不用加自增列
--建立測試環境
Create Table A
(a Int)
--插入數據
Insert A Select 15
Union All Select 17
Union All Select 19
Union All Select 22
--測試
Select 
T.a,
(T.a-(Select Top 1 a from A Where a<T.a Order By a Desc)) As 列差
from A T
--刪除測試環境
Drop Table A
--結果
/*
a 列差
15 NULL
17 2
19 2
22 3
*/

#4


楼上正解 :)

#5


学习啊,牛人~

#6


请问 T.a 中的T是临时表吗?

#7


T 不需要创建吗

#8


iec(冰冰凉) ( ) 信誉:100  2006-04-22 15:24:00  得分: 0  
 
 
   请问 T.a 中的T是临时表吗?
  
 
Top  
 iec(冰冰凉) ( ) 信誉:100  2006-04-22 15:29:00  得分: 0  
 
 
   T 不需要创建吗
  
 
Top  
-----------------------------------------------------------
看這句
from A T

T只是A表的別名,不需要另外創建。

#9


好,结题