Sql server 将服务器状态数据转换为24小时运行的表格格式

Sql server 将服务器状态数据转换为24小时运行的表格格式,sql-server,xml,linq,c#-4.0,Sql Server,Xml,Linq,C# 4.0,我需要使用c在asp.net网格视图中以5分钟为增量显示过去24小时内正在运行的服务器状态。数据以SQL Server记录的形式存在:主机名、记录日期、记录时间、状态。我需要将数据转换为表格格式以加载网格视图控件。转换为主机名、日期、00:00状态、00:05状态、…、23:55状态。当然,问题之一是用户可以随时访问网页。列名必须是5分钟的增量时间,如15.30、15.35等。它们将始终相同,因为将显示24小时,但顺序不同,并且可能会交叉日期,具体取决于用户登录网站的时间。我希望我已经解释得足够

我需要使用c在asp.net网格视图中以5分钟为增量显示过去24小时内正在运行的服务器状态。数据以SQL Server记录的形式存在:主机名、记录日期、记录时间、状态。我需要将数据转换为表格格式以加载网格视图控件。转换为主机名、日期、00:00状态、00:05状态、…、23:55状态。当然,问题之一是用户可以随时访问网页。列名必须是5分钟的增量时间,如15.30、15.35等。它们将始终相同,因为将显示24小时,但顺序不同,并且可能会交叉日期,具体取决于用户登录网站的时间。我希望我已经解释得足够清楚了。所有选项都在表中:linq、linq到sql、linq到xml,等等


谢谢您的帮助。

我将提供一个T-SQL解决方案。您需要一个日期表,其中包含所讨论的一天的5分钟间隔。左键将其与访问日志或任何称为表(其中访问时间在每个时间范围内)连接起来,并执行任何您想要的聚合。这将为您提供垂直列表。然后,您需要对其进行透视,以使您的时间范围成为搜索SQL server透视运算符的列

下面是粗略的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);

谢谢你,凯文。再加上一个就是为了酷sql。我在一个表格中有过去24小时的数据。我的数据加载器就是这样做的。它具有主机名、记录时间、记录日期和状态。记录时间始终为5分钟的倍数,数据仅以5分钟的间隔转储。看,它总是以0或5结尾。我想我只需要按照你的建议进行透视,这样我就可以得到记录时间作为每一列的名称,状态作为每一列的数据。我将对此做一些研究。再次感谢。