2014-02-22 56 views
1

获取每分钟活动实例的数量我有数据库需要从数据库

Table name PerformanceUserData 
Coulumns (StartDate as datetime, enddate as datetime,ip address, instance) 

对于每一行实例值是1。

的样本数据是

2/21/2014 10:39:17 AM 2/21/2014 10:40:24 AM 192.168.1.51 1 
2/21/2014 10:40:24 AM 2/21/2014 10:41:57 AM 192.168.1.51 1 
2/21/2014 3:51:29 PM 2/21/2014 3:51:30 PM 192.168.1.12 1 
2/21/2014 3:51:30 PM 2/21/2014 3:52:06 PM 192.168.1.12 1 
2/21/2014 3:52:06 PM 2/21/2014 3:52:39 PM 192.168.1.12 1 
2/21/2014 3:52:39 PM 2/21/2014 3:53:12 PM 192.168.1.12 1 

输入到查询开始日期和结束日期 如果开始日期是2014年2月21日3:51:30,并且enddate是2014/2/21 5:51:30我需要每分钟从下午3点15分到下午3点16分的数据

数据需要

Time    number of instances 
3.51 to 3.52  2 
3.52 to 3.53  2 
+0

还有,你试过吗? –

+0

我们已经建立了目录并将所有条目推入其中,然后在其他表上进行连接但是这需要很长时间 – user2478625

回答

1

@gordon是不错。很迷惑律约样本数据, 尝试这样的事情,

Declare @PerformanceUserData Table(StartDate datetime, enddate datetime,ip varchar(20), instance int) 
insert into @PerformanceUserData 
select '2/21/2014 10:39:17 AM','2/21/2014 10:40:24 AM','192.168.1.51', 1 union all 
select '2/21/2014 10:40:24 AM','2/21/2014 10:41:57 AM','192.168.1.51',1 union all 
select '2/21/2014 3:51:29 PM','2/21/2014 3:51:30 PM','192.168.1.12',1 union all 
select '2/21/2014 3:51:30 PM','2/21/2014 3:52:06 PM','192.168.1.12',1 union all 
select '2/21/2014 3:52:06 PM','2/21/2014 3:52:39 PM','192.168.1.12',1 union all 
select '2/21/2014 3:52:39 PM','2/21/2014 3:53:12 PM','192.168.1.12',1 
--select * from @PerformanceUserData 
Declare @startdate datetime='2/21/2014 3:51:30 PM' 
Declare @enddate datetime='2/21/2014 5:51:30 PM' 
Declare @t Table(dates datetime, rn int) 
;with cte as 
(
select @startdate dates, 
1 rn 
union all 
select DATEADD(minute,1,dates),rn+1 from cte where dates<@enddate 
) 

insert into @t 
select * from cte option(maxrecursion 0) 

select a.dates,b.dates 
,(select count(*) from @PerformanceUserData where StartDate 
between a.dates and b.dates)[number of instances] 
from @t a inner join @t b on b.rn-a.rn=1