日期:2014-05-17  浏览次数:20421 次

行对比,少于3分钟则当一条记录


如:
ID   T1                     T2
001  2013-1-1 12:00:00    2013-1-1 12:00:30
001  2013-1-1 12:02:23    2013-1-1 12:03:20
001  2013-1-1 12:03:40    2013-1-1 12:05:30
002  2013-1-1 12:20:03    2013-1-1 12:22:23
002  2013-1-1 22:00:00    2013-1-1 12:00:30
002  2013-1-14 08:30:00    2013-1-14 08:31:30


以上是001和002的查询时间,T1是开始时间,T2.是结束时间
由于001在1号相邻的两个查询时间(上下两个开始时间)相差部超过3分钟,所以001在1号只能算查询过1次。
同理002在1号查询过2次,在14号查询过1次。

如何通过SQL2000来获取001和002每日的查询次数?
行对比 sql

------解决方案--------------------


if object_id('tb') is not null
drop table tb
go
create table tb(ID char(3),T1 datetime,T2 datetime)
go
insert into tb
select '001','2013-01-01 12:00:00','2013-1-1 12:00:30'
 union all select '001' , '2013-01-01 12:02:23' ,   '2013-1-1 12:03:20'
 union all select  '001' , '2013-01-1 12:03:40' ,   '2013-1-1 12:05:30'
 union all select  '002',  '2013-01-1 12:20:03' ,   '2013-1-1 12:22:23'
 union all select  '002' , '2013-1-1 22:00:00' ,   '2013-1-1 12:00:30'
 union all select  '002' , '2013-1-14 08:30:00' ,   '2013-1-14 08:31:30'


select ID,convert(char(10),T1,120) T1,count(*) icount from 
( select a.ID,a.T1,min(B.T1) as T3 from tb as a left join tb as b on a.ID=b.ID 
and convert(char(10),a.T1,120)=convert(char(10),b.T1,120)and a.T1<b.T1
group by a.ID,a.T1 ) as a
where T3 is null or datediff(n,T1,T3)>3
group by ID,convert(char(10),T1,120)
/*
001 2013-01-01 1
002 2013-01-01 2
002 2013-01-14 1

*/