2011-10-12 58 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。