Средние в Sql Server Management Studio - PullRequest
2 голосов
/ 27 сентября 2011

Мне нужно получить среднесуточные значения для нескольких тегов в моих данных. У меня проблема со следующим заданным запросом:

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

Ошибка, которую я получаю после моей попытки выполнить: Msg 8120, уровень 16, состояние 1, строка 5 Столбец History.TagName недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Может ли кто-нибудь помочь разработать запрос для получения среднесуточных значений для моих тегов?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Добавить предложение 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)) 
0 голосов
/ 27 сентября 2011

Попробуйте это: (добавлено предложение 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. Значения даты и времени, вероятно, будут уникальными и, следовательно, не будут подходящими кандидатами для агрегирования. Не без некоторой работы, чтобы изолировать часть значения времени данных.

...