2012-08-24 22 views
0

兩次場均列我有一個包含以下內容的表:在一個查詢

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

我想寫一個查詢,將下表返回(Node是DISTINCT)。

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

所以,我基本上是試圖採取加載時的平均過去24小時,然後加載時的另一平均是平均所有這些都是在表中加載時的數據。這是我用來獲取今天平均值的查詢。

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

我需要添加到此查詢以平均所有記錄的LoadTime?任何幫助將不勝感激。謝謝。

回答

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 
+0

工程太棒了!謝謝! – Andrew

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