2011-10-12 60 views
1

这是问题的一个后续从我以前的帖子SQL循环由/排序

我有下面的代码将查询时,我们的代理商在特定的时间已登录的数据库。它在某一天很好地工作,但我现在需要在选定的时间段内完成。我不确定从哪里开始调整!我需要按日期和时间进行分组的结果...所以它看起来如下

date  hour count 
10/10/11 22  52 
10/10/11 23  24 
11/10/11 00  12 
11/10/11 01  33 

所以24小时内将显示所选范围内的每个日期。

ALTER procedure [dbo].[LoggedOnCountByHour] 
    @DayToCheck datetime, 
    @HelplineID int 
as 

select dateadd(hour, N.number, @DayToCheck) as [date_hour], 
     DATEPART(hh,dateadd(hour, N.number, @DayToCheck)) as [Hour], 
     count(L.ExpertRecID) as [count of users] 
from master..spt_values as N 
    left outer join WorkDetail as L 
    on L.KickedOffTime > dateadd(hour, N.number, @DayToCheck) and 
     L.LoginTime < dateadd(hour, N.number + 1, @DayToCheck) 
left join PoolMembership P on P.ExpertRecID = L.ExpertRecID 

where N.Type = 'P' and 
     N.Number between 0 and 23 and 
     P.HelplinePoolID = @HelplineID 
group by dateadd(hour, N.number, @DayToCheck), DATEPART(hh,dateadd(hour, N.number, @DayToCheck)) 

有什么想法? 非常感谢

+0

为SQL Server 2000添加标签。我想你仍然使用它? –

回答

0

像这样的东西(不彻底的测试)

alter procedure [dbo].[LoggedOnCountByHour] 
     @FromDayToCheck datetime, 
     @ToDayToCheck datetime, 
     @HelplineID int 
as 

select dateadd(hour, N.number, @FromDayToCheck) as [date_hour], 
     DATEPART(hh,dateadd(hour, N.number, @FromDayToCheck)) as [Hour], 
     count(L.ExpertRecID) as [count of users] 
from master..spt_values as N 
    left outer join WorkDetail as L 
    on L.KickedOffTime > dateadd(hour, N.number, @FromDayToCheck) and 
     L.LoginTime < dateadd(hour, N.number + 1, @FromDayToCheck) 
    left join PoolMembership P on P.ExpertRecID = L.ExpertRecID 

where N.Type = 'P' and 
     dateadd(hour, N.number + 1, @FromDayToCheck) <= @ToDayToCheck + 1 and 
     P.HelplinePoolID = @HelplineID 
group by dateadd(hour, N.number, @FromDayToCheck), DATEPART(hh,dateadd(hour, N.number, @FromDayToCheck)) 
order by [date_hour], [Hour] 

注意:如果你认为你是核对您的间隔时间超过2048个小时,您应该使用的,而不是主Numbers表格。 .spt_values。