0

c# を使用して asp.net グリッド ビューで、過去 24 時間の実行中のサーバー ステータスを 5 分単位で表示する必要があります。データは、HostName、RecordDate、RecordTime、Status の形式の SQL Server レコードにあります。グリッド ビュー コントロールを読み込むには、データを表形式に変換する必要があります。次のようなものに変換します: HostName、Date、00:00 ステータス、00:05 ステータス、...、23:55 ステータス。もちろん、問題の 1 つは、ユーザーがいつでも Web ページにアクセスできることです。列名は、15.30、15.35 などのように 5 分刻みの時間である必要があります。24 時間が表示されるため、常に同じになりますが、順序が異なり、日付が交差する可能性があります。ユーザーが Web サイトにログインします。これで十分に説明できたと思います。すべてのオプションがテーブルにあります: linq、linq から sql、linq から xml など。

助けてくれてありがとう。

4

1 に答える 1

0

T-SQL ソリューションを提供します。問題の日の 5 分間隔を保持する日付テーブルが必要です。アクセス時間が各時間範囲内にある AccessLog (またはそれが呼ばれるもの) テーブルと左結合し、必要な集計を行います。これにより、垂直リストが表示されます。次に、TimeRanges を列にするには、それを PIVOT する必要があります (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 に答える