Sql 在一个查询中平均一列两次

Sql 在一个查询中平均一列两次,sql,tsql,Sql,Tsql,我有一个表,其中包含以下内容: ID Node LoadTime DateTimeCST Failed ----------------------------------------- 我正在尝试编写一个查询,该查询将返回下表(节点是不同的) 所以,我基本上是尝试取过去24小时的平均LoadTime,然后是另一个平均LoadTime,它对LoadTime表中的所有数据进行平均。这是我用来计算今天平均值的查询 SELECT DISTINCT Node, AVG(LoadTime

我有一个表,其中包含以下内容:

ID   Node   LoadTime   DateTimeCST   Failed
-----------------------------------------
我正在尝试编写一个查询,该查询将返回下表(节点是不同的)

所以,我基本上是尝试取过去24小时的平均LoadTime,然后是另一个平均LoadTime,它对LoadTime表中的所有数据进行平均。这是我用来计算今天平均值的查询

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

我需要在这个查询中添加什么才能同时获得所有记录的平均加载时间?任何帮助都将不胜感激。谢谢

由于识别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

您可以使用多个子查询来获取数据以及它们之间的连接。比如:

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