我将提供一个 T-SQL 解决方案。您需要一个日期表,其中包含相关日期的 5 分钟间隔。将其与访问时间在每个时间范围内的 AccessLog(或其他任何名称)表连接起来,并执行您想要的任何聚合。这将为您提供垂直列表。然后您需要 PIVOT 以使您的 TimeRanges 成为列(搜索 SQL 服务器 PIVOT 运算符)。
下面是粗略的 SQL。之后,您只需要将结果包装到数据透视表中。
declare @myDate SMALLDATETIME = '20130415';
;with TimeRanges as (
SELECT TOP 288 DateAdd(minute, (Row_Number() over (order by sc1.Name) -1) * 5 , @myDate) TimeRangeMin
, DateAdd(minute, Row_Number() over (order by sc1.Name) * 5 , @myDate) TimeRangeMax
FROM Master.dbo.SysColumns sc1, Master.dbo.SysColumns sc2
)
select convert(varchar(5), TimeRangeMin, 114) AS TimeRange, COUNT(*)
from TimeRanges t
LEFT JOIN AccessLog a on a.AccessTime >= t.TimeRangeMin and a.AccessTime < t.TimeRangeMax
GROUP BY convert(varchar(5), TimeRangeMin, 114);