0

次のものを含むテーブルがあります。

ID   Node   LoadTime   DateTimeCST   Failed
-----------------------------------------

次のテーブルを返すクエリを作成しようとしています(ノードはDISTINCTです)。

Node    TodaysAverageLoadTime    HistoricalLoadTime
----------------------------------------------------

したがって、基本的に過去24時間のLoadTimeの平均を取得し、次にLoadTimeのテーブルにあるすべてのデータを平均するLoadTimeの別の平均を取得しようとしています。これは、今日の平均を取得するために使用していたクエリです。

SELECT DISTINCT Node, AVG(LoadTime)
FROM dbo.Table
WHERE Failed != 1
AND DATEDIFF(day, DateTimeCST, GETDATE()) = 0 
GROUP BY Node

すべてのレコードの平均LoadTimeを取得するには、このクエリに何を追加する必要がありますか?どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

1

TodaysAverageLoadTimeのレコードとHistoricalLoadTimeのレコードを識別するための基準が異なるため、単一のクエリで実行することはできません。ただし、次のようにシミュレートできます。

SELECT 
       Node,
       ISNULL(TodaysAvgLoadTime, 0)
       ISNULL(HistoricalLoadTime, 0)
FROM 
        (
            SELECT 
                 Node, 
                 AVG(LoadTime) 'TodaysAvgLoadTime'
            FROM 
                 dbo.Table
            WHERE 
                 Failed != 1
            AND  DATEDIFF(day, DateTimeCST, GETDATE()) = 0 
            GROUP BY Node
        ) AS A
        FULL OUTER JOIN
        (
            SELECT 
                 Node, 
                 AVG(LoadTime) 'HistoricalLoadTime'
            FROM 
                 dbo.Table
            WHERE 
                 Failed != 1
            GROUP BY Node
        ) AS B
        ON A.Node = B.Node
于 2012-08-24T17:02:44.057 に答える
1

複数のサブクエリを使用して、データを取得し、それらを結合することができます。だから次のようなもの:

SELECT Node, t1.avg, t2.avg FROM
    (SELECT DISTINCT Node, AVG(LoadTime) AS avg
    FROM dbo.Table, 
    WHERE Failed != 1
    AND DATEDIFF(day, DateTimeCST, GETDATE()) = 0 
    GROUP BY Node) t1, 
    (SELECT DISTINCT Node, AVG(LoadTime) AS avg
    FROM dbo.Table, 
    WHERE Failed != 1
    GROUP BY Node) t2
WHERE t1.node = t2.node
于 2012-08-24T17:04:03.520 に答える