1

レポートしようとしているパフォーマンスデータがいくつかあります。

各カウンターの月の各週の平均を取得するための出力が必要です。

これは、日付/時刻フィールドを使用するクエリです(つまり、「2012-01-01 00:00:00.750」)。

SELECT MachineName ,
        CounterName ,
        InstanceName, 
        CounterValue,
        ObjectName,
        CounterDateTime 
FROM    dbo.CounterDetails cdt

        INNER JOIN dbo.CounterData cd ON cdt.CounterID = cd.CounterID
        INNER JOIN DisplayToID d ON d.GUID = cd.GUID

WHERE   MachineName = '\\SERVER1'

AND CounterDateTime BETWEEN '2012-01-01 00:00:00.750' AND '2012-01-31 23:59:00.750'
GROUP BY ObjectName, CounterName, InstanceName, CounterValue, CounterDateTime, MachineName
ORDER BY CounterDateTime

返信に感謝します

4

1 に答える 1

0

私には意味が分からないので、あなたのフィールドを再配置しましたが、これを試すことができます:

SELECT  MachineName
        , ObjectName
        , InstanceName
        , CounterName
        , DATEPART( YEAR, CounterDateTime ) As YearNo
        , DATEPART( MONTH, CounterDateTime ) As MonthNo
        , DATEPART( WEEK, CounterDateTime ) AS WeekNo
        , AVG(CounterValue) AS avgCounterValue
FROM    dbo.CounterDetails cdt
        INNER JOIN dbo.CounterData cd
            ON cdt.CounterID = cd.CounterID
        INNER JOIN DisplayToID d
            ON d.GUID = cd.GUID
WHERE       MachineName = '\\SERVER1'
            AND CounterDateTime BETWEEN '2012-01-01 00:00:00.750' AND '2012-01-31 23:59:00.750'
GROUP BY    MachineName, ObjectName, InstanceName, CounterName
            , DATEPART( YEAR, CounterDateTime )
            , DATEPART( MONTH, CounterDateTime )
            , DATEPART( WEEK, CounterDateTime )
ORDER BY    MachineName, ObjectName, InstanceName, CounterName
            , DATEPART( YEAR, CounterDateTime )
            , DATEPART( MONTH, CounterDateTime )
            , DATEPART( WEEK, CounterDateTime )

テーブルが大きい場合は、[MachineName] と [CounterDateTime] にインデックスを作成することをお勧めします。

于 2012-12-27T07:48:57.060 に答える