ssid           datetime
1              2006-07-20 13:28:02.000
1              2006-07-20 13:29:03.000
1              2006-07-20 13:31:00.000本来应该每1分钟有1条记录,怎样查出哪个时间段的数据丢失了?
2006-07-20 13:30:00.000

解决方案 »

  1.   

    create table T(ssid int, [date] datetime)
    insert T select 1,              '2006-07-20 13:28:02.000'
    union all select 1,              '2006-07-20 13:29:03.000'
    union all select 1,              '2006-07-20 13:31:00.000'declare @tb table([date] datetime)
    declare @maxDT datetime, @minDT datetime
    select @maxDT=max([date]), @minDT=min([date])
    from T
    while @minDT<=@maxDT
    begin
    insert @tb values(@minDT)
    set @minDT=dateadd(minute, 1, @minDT)
    end
    insert @tb values(@minDT)select tmp.* from @tb as tmp
    left join T on convert(char(16), T.[date], 120)=convert(char(16), tmp.[date], 120)
    where T.[date] is null--result
    date                                                   
    ------------------------------------------------------ 
    2006-07-20 13:30:02.000(1 row(s) affected)
      

  2.   

    都可以,分两种情况
    select datediff(mm,-1,[datetime]) from table 
    where 
    not exists(select * from table where [datetime]= datediff(mm,-1,[datetime])
    select datediff(mm,1,[datetime]) from table 
    where 
    not exists(select * from table where [datetime]= datediff(mm,1,[datetime])
      

  3.   

    思路大致是:新建一临时表@tb table([date] datetime)
    设置最小时间为(@minDT)
    select @maxDT=max([date]), @minDT=min([date])
    from T
    while @minDT<=@maxDT
    begin
    insert @tb values(@minDT)
    然后从最小时间开始+1分钟set @minDT=dateadd(minute, 1, @minDT) 条件是while @minDT<=@maxDT
    这样相当于从最小时间开始--最大时间,记录每一分钟的一个表
    查询在临时表中有但在你原表中没有的记录就是你想要的记录.呵呵,说的有点罗嗦,:)