解决方案 »

  1.   

    SQL 问题,最好去相关数据库论坛去问。如果使用c#编程,肯定(对大多数人来说)比SQL方便。如果你不是非要用SQL语句去实现,那么这个东西就会变得很简单的,就是简单地一两层循环而已。
      

  2.   

    而且你这样统计是很不靠谱的做法
    如果巡逻01在一次停靠之后,没有其他车辆再次停靠
    然后01又停靠,这个ID就会是连续的
    你单纯从ID就没法区分了,还要再判断时间间隔
      

  3.   

    下班了 没时间啦 暂写道这create table a(id int,time datetime)
    insert into a 
    select 1,'2014-10-01 05:00:06' union all
    select 2,'2014-10-01 05:00:26' union all
    select 4,'2014-10-01 05:10:06' union all
    select 6,'2014-10-01 05:11:06' union all
    select 7,'2014-10-01 05:11:20' union all
    select 8,'2014-10-01 05:11:30' union all
    select 10,'2014-10-01 05:14:06'Create proc d_gettime
    as
    begin
    create table #tb(beginid int,endid int,duration int)
    declare @begin int
    declare @begintime datetime
    declare @changebegin int
    declare @end int
    declare @endtime datetime
    set @begin=0
    set @changebegin=0
    declare @item int
    declare @itemvalue datetime
    declare @i int
    set @i=0
    declare mycursor cursor for select id,time from a order by id
    open mycursor
    fetch next from mycursor into @item,@itemvalue
    while (@@fetch_status=0)
    begin
    if(@i=0)
    begin
    set @begin=@item
    set @begintime=@itemvalue
    end
    if(@item<>@changebegin+1 and @changebegin<>0)
    begin
    if(@end-@begin>0)
    begin
    insert into #tb select @begin,@end,DATEDIFF(SS,@begintime,@endtime)
    end
    set @begin=@item
    set @begintime=@itemvalue
    end
    else
    begin
    set @end=@item
    set @endtime=@itemvalue
    end
    set @changebegin=@item
    set @i=@i+1
    fetch next from mycursor into @item,@itemvalue
    end
    close mycursor
    deallocate mycursor
    select * from #tb
    end
    --执行存储过程
    exec d_gettime
    --结果
    beginid     endid       duration
    ----------- ----------- -----------
    1           2           20
    6           8           24