sql server 版本为2000表数据如下: 序列号 站点 记录时间
001 A100 2009-02-01 13:32:00
001 A201 2009-02-01 13:42:00
001 A401 2009-02-01 14:43:00
002 A100 2009-02-01 13:33:00
002 A201 2009-02-01 13:43:00
002 A401 2009-02-01 14:43:00
请问如何用sql代码计算指定序列号不同站点间的记录时间差
希望得到的结果: 001 10 A201-A100
001 61 A401-A201
002 10 A201-A100
002 60 A401-A201
001 A100 2009-02-01 13:32:00
001 A201 2009-02-01 13:42:00
001 A401 2009-02-01 14:43:00
002 A100 2009-02-01 13:33:00
002 A201 2009-02-01 13:43:00
002 A401 2009-02-01 14:43:00
请问如何用sql代码计算指定序列号不同站点间的记录时间差
希望得到的结果: 001 10 A201-A100
001 61 A401-A201
002 10 A201-A100
002 60 A401-A201
insert into tb values('001', 'A100' ,'2009-02-01 13:32:00 ')
insert into tb values('001', 'A201' ,'2009-02-01 13:42:00 ')
insert into tb values('001', 'A401' ,'2009-02-01 14:43:00 ')
insert into tb values('002', 'A100' ,'2009-02-01 13:33:00 ')
insert into tb values('002', 'A201' ,'2009-02-01 13:43:00 ')
insert into tb values('002', 'A401' ,'2009-02-01 14:43:00 ')
go
select m.序列号 , datediff(mi , m.记录时间 , n.记录时间) 分钟,m.站点 + '-' + n.站点 站点 from
(select * , px = (select count(1) from tb where 序列号 = t.序列号 and 记录时间 < t.记录时间) + 1 from tb t) m,
(select * , px = (select count(1) from tb where 序列号 = t.序列号 and 记录时间 < t.记录时间) + 1 from tb t) n
where m.序列号 = n.序列号 and m.px = n.px - 1drop table tb/*
序列号 分钟 站点
---------- ----------- ---------------------
001 10 A100-A201
001 61 A201-A401
002 10 A100-A201
002 60 A201-A401(所影响的行数为 4 行)
*/
insert @a
select '001','A100','2009-02-01 13:32:00' Union ALL
select '001','A201','2009-02-01 13:42:00' Union ALL
select '001','A401','2009-02-01 14:43:00' Union ALL
select '002','A100','2009-02-01 13:33:00' Union ALL
select '002','A201','2009-02-01 13:43:00' Union ALL
select '002','A401','2009-02-01 14:43:00'select a.序列号,
abs(DATEDIFF ( n , b.记录时间 , a.记录时间 )) 时间差,--只算分钟
b.站点+'-'+a.站点 站点区间
from @a a
join @a b on a.序列号=b.序列号 and
convert(varchar(100),a.记录时间,112) = convert(varchar(100),b.记录时间,112) and --同一天
right(b.站点,3) > right(a.站点,3) --站点顺序
where a.站点<>b.站点 and
(cast(substring(b.站点,2,1) as numeric) - cast(substring(a.站点,2,1) as numeric)) < '3'
001 10 A201-A100
001 61 A401-A201
002 10 A201-A100
002 60 A401-A201