我需要在使用c#的asp.net网格视图中以5分钟为增量显示最近24小时的运行服务器状态。数据位于以下形式的SQL Server记录中:HostName,RecordDate,RecordTime,Status。我需要将数据转换为表格格式以加载网格视图控件。转换为类似:HostName,Date,00:00 status,00:05 status,...,23:55状态。当然,其中一个问题是用户可以随时访问网页。列名必须是5分钟的增量时间,如15.30,15.35等。它们将始终相同,因为将显示24小时,但将以不同的顺序,并可能交叉日期,具体取决于何时用户登录网站。我希望我已经解释得这么好了。所有选项都在桌面上:linq,linq to sql,linq to xml等等。
感谢您的帮助。
答案 0 :(得分:0)
我将提供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);