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中实现,谢谢。 展开
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中实现,谢谢。 展开
展开全部
主键是什么啊?如果主键是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
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是个线程,哈哈那这个可复杂了!
你给的分少,我可不答!
numberinterval=select * from nub2-nub1
哦,原来ID是个线程,哈哈那这个可复杂了!
你给的分少,我可不答!
追问
如果你能解决而且我验证是可以用的话,可以把全部的分都给你啊,我去看看我有多少分。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
纯SQL完成我也不会,关注一下。
郁闷的是,没有一个标识列。
貌似还要按ID分组计算
郁闷的是,没有一个标识列。
貌似还要按ID分组计算
追问
那如果添加一列,是标识列呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询