0

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

谢谢你的帮助。

4

1 回答 1

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);
于 2013-04-19T15:29:57.553 回答