【问题标题】:Averages in Sql Server Management StudioSql Server Management Studio 中的平均值
【发布时间】:2011-09-27 15:48:41
【问题描述】:

我需要获取数据中多个标签的每日平均值。我在设置以下查询时遇到了问题:

SET NOCOUNT ON
DECLARE @StartDate DateTime
SET @StartDate = '20100101 00:00:00.000'
SET NOCOUNT OFF
SELECT TagName, DateTime, avg(Value), avg(vValue)
FROM History
WHERE TagName IN ('BFC_CGA_PE.qAr_Reading', 'BFC_CGA_PE.qBTU_Avg', 'BFC_CGA_PE.qBTU_Calc', 'BFC_CGA_PE.qCH4_Reading', 'BFC_CGA_PE.qCO_Reading', 'BFC_CGA_PE.qCO2_Reading', 'BFC_CGA_PE.qH2_Reading', 'BFC_CGA_PE.qN2_Reading', 'BFC_CGA_PE.qO2_Reading')
AND wwRetrievalMode = 'Cyclic' 
AND wwVersion = 'Latest'
AND DateTime >= @StartDate

我尝试执行后收到的错误是: 消息 8120,第 16 层,状态 1,第 5 行 选择列表中的“History.TagName”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

有人可以帮助开发一个查询来获取我的标签的每日平均值值吗?

【问题讨论】:

    标签: average ssms


    【解决方案1】:

    试试这个:(添加了 GROUP BY 子句并从查询中删除了 DateTime 列)

    SELECT TagName, /*DateTime,*/ avg(Value), avg(vValue)
    FROM History
    WHERE TagName IN ('BFC_CGA_PE.qAr_Reading', 'BFC_CGA_PE.qBTU_Avg', 'BFC_CGA_PE.qBTU_Calc', 'BFC_CGA_PE.qCH4_Reading', 'BFC_CGA_PE.qCO_Reading', 'BFC_CGA_PE.qCO2_Reading', 'BFC_CGA_PE.qH2_Reading', 'BFC_CGA_PE.qN2_Reading', 'BFC_CGA_PE.qO2_Reading')
    AND wwRetrievalMode = 'Cyclic' 
    AND wwVersion = 'Latest'
    AND DateTime >= @StartDate
    GROUP BY TagName
    ORDER BY TagName
    

    您只需要为 TagName 设置一个分组依据。请注意,我现在删除了您的 DateTime 列。日期时间值可能是唯一的,因此不适合聚合。并非没有一些工作来隔离数据时间值的一部分。

    【讨论】:

      【解决方案2】:

      添加一个 GROUP BY 子句。还假设 DateTime 字段存储日期和时间,您将希望仅按日期聚合以获取每日平均值,如下查询:

      SELECT 
        TagName, 
        DATEADD(D, 0, DATEDIFF(D, 0, DateTime)), 
        avg(Value), 
        avg(vValue)
      FROM History
      WHERE TagName IN ('BFC_CGA_PE.qAr_Reading', 'BFC_CGA_PE.qBTU_Avg', 'BFC_CGA_PE.qBTU_Calc', 'BFC_CGA_PE.qCH4_Reading', 'BFC_CGA_PE.qCO_Reading', 'BFC_CGA_PE.qCO2_Reading', 'BFC_CGA_PE.qH2_Reading', 'BFC_CGA_PE.qN2_Reading', 'BFC_CGA_PE.qO2_Reading')
      AND wwRetrievalMode = 'Cyclic' 
      AND wwVersion = 'Latest'
      AND DateTime >= @StartDate
      GROUP BY TagName, DATEADD(D, 0, DATEDIFF(D, 0, DateTime)) 
      

      【讨论】:

        猜你喜欢
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-26
        • 2014-06-06
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多