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 语句中的临时表换为原始表就可以了
解决方法:
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表的別名,不需要另外創建。
请问 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 语句中的临时表换为原始表就可以了
解决方法:
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表的別名,不需要另外創建。
请问 T.a 中的T是临时表吗?
Top
iec(冰冰凉) ( ) 信誉:100 2006-04-22 15:29:00 得分: 0
T 不需要创建吗
Top
-----------------------------------------------------------
看這句
from A T
T只是A表的別名,不需要另外創建。
#9
好,结题