sql 实现某列中,后一个数字减去前一个数字,取得差值,写入新表 5

有一张表IDTimeCELLID103000011040500110506002109080041123309820200112204561152053311520728... 有一张表
ID Time CELLID
1 0300 001
1 0405 001
1 0506 002
1 0908 004
1 1233 098
2 0200 112
2 0456 115
2 0533 115
2 0728 123

按照ID分组,分别计算每组中后一行中的time与前一行time的差值,并存放到新的表(interval)中,即结果为(括号中的内容不显示):
ID number CELLID numberinterval
1 0300 001 0(0300-0300)
1 0405 001 0105(0405-0300)
1 0506 002 0101(0506-0405)
1 0908 004 0402(0908-0506)
1 1233 098 0425(1233-0908)
2 0200 112 0(0200-0200)
2 0456 115 0256(0456-0200)
2 0533 115 77(0533-0456)
2 0728 123 195(0728-0533)

要求,采用sql server中实现,谢谢。
展开
 我来答
cdchj
2011-12-11 · TA获得超过114个赞
知道小有建树答主
回答量:185
采纳率:100%
帮助的人:66.9万
展开全部
主键是什么啊?如果主键是ID + number列的话:
declare @ID INT, @number INT
create table #T_ID( ID INT )
create table #TI ( number int, cellid int )
inset #T_ID select distinct ID from 原表 order by 1
while ( select count(*) from #T_ID ) > 0
select top 1 @ID = ID from #T_ID
delete #T_ID WHERE @ID = ID
delete #T1
inset #T1 select number, cellID from 原表 where ID = @ID
while ( select count(*) from #T1 ) > 0
begin
select top 1 @number = number from #T1
delete #T1 WHERE @number = number
insert 新表
select @ID, @number, cellID, @number - isnull( ( select top 1 number from 原表 where ID = @ID and number < @number order by number ), @number )
FROM 原表 where ID = @ID and @number = number
end
end
追问
如果有一列主键,是1,2,3,4...呢?
像这样
ID N Time CELLID
1 1 0300 001
1 2 0405 001
1 3 0506 002
1 4 0908 004
1 5 1233 098
2 6 0200 112
...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-12-11
展开全部
你这不是写出来了么?
numberinterval=select * from nub2-nub1
哦,原来ID是个线程,哈哈那这个可复杂了!
你给的分少,我可不答!
追问
如果你能解决而且我验证是可以用的话,可以把全部的分都给你啊,我去看看我有多少分。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
splaybow
2011-12-11 · TA获得超过488个赞
知道小有建树答主
回答量:941
采纳率:0%
帮助的人:724万
展开全部
纯SQL完成我也不会,关注一下。
郁闷的是,没有一个标识列。
貌似还要按ID分组计算
追问
那如果添加一列,是标识列呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式