2011-09-27 91 views
2

我需要獲取數據中多個標記的每日平均值。我正在與下面的查詢問題,我已經設置了:Sql Server Management Studio中的平均值

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子句中。

有人可以幫助開發一個查詢來獲取日常平均值我的標籤的值?

回答

0

試試這個:(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 

你只需要一組由標記名。注意我現在刪除了你的DateTime列。日期時間值可能是唯一的,因此不適合聚合。不是沒有一些工作來隔離數據時間值的一部分。

0

添加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)) 
相關問題