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

iec 2006-04-22 11:41:16
表A
a
15
17
19
22
---------
我们要得到 17-15 =2 19-17 =2 22-19怎么写SQL啊?
...全文
424 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinak62 2006-04-22
  • 打赏
  • 举报
回复
不知道搂主说的前一条记录这个顺序是怎么得到的
解决方法:

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 语句中的临时表换为原始表就可以了
iec 2006-04-22
  • 打赏
  • 举报
回复
up
iec 2006-04-22
  • 打赏
  • 举报
回复
好,结题
paoluo 2006-04-22
  • 打赏
  • 举报
回复
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表的別名,不需要另外創建。
iec 2006-04-22
  • 打赏
  • 举报
回复
T 不需要创建吗
iec 2006-04-22
  • 打赏
  • 举报
回复
请问 T.a 中的T是临时表吗?
itblog 2006-04-22
  • 打赏
  • 举报
回复
学习啊,牛人~
xeqtr1982 2006-04-22
  • 打赏
  • 举报
回复
楼上正解 :)
paoluo 2006-04-22
  • 打赏
  • 举报
回复

如果表中數據是按這種格式排列的話,也可以不用加自增列
--建立測試環境
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
*/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧