怎样查询缺少的数据?(新手)
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
------解决方案--------------------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)
------解决方案--------------------思路大致是:新建一临时表@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
这样相当于从最小时间开始--最大时间,记录每一分钟的一个表
查询在临时表中有但在你原表中没有的记录就是你想要的记录.
呵呵,说的有点罗嗦,:)