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

解决方案 »

  1.   

    create table tb(序列号 varchar(10),站点 varchar(10),记录时间 datetime)
    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 行)
    */
      

  2.   

    declare @a table (序列号 varchar(20),站点 varchar(20),记录时间 datetime)
    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'
      

  3.   

    序列号 时间差 站点区间
    001 10 A201-A100
    001 61 A401-A201
    002 10 A201-A100
    002 60 A401-A201