2 Stimmen

Durchschnittswerte in Sql Server Management Studio

Ich benötige tägliche Durchschnittswerte für mehrere Tags in meinen Daten. Ich habe ein Problem mit der folgenden Abfrage, die ich eingerichtet habe:

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

Die Fehlermeldung, die ich nach dem Versuch der Ausführung erhalte, lautet: Msg 8120, Ebene 16, Status 1, Zeile 5 Die Spalte "History.TagName" ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Könnte jemand helfen, eine Abfrage zu entwickeln, um Folgendes abzurufen Tagesdurchschnitt Werte für meine Tags?

0voto

Paul Sasik Punkte 76202

Versuchen Sie Folgendes: (GROUP BY-Klausel hinzugefügt und DateTime-Spalte aus der Abfrage entfernt)

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

Sie brauchen nur eine Gruppierung nach für TagName. Beachten Sie, dass ich Ihre DateTime-Spalte vorerst entfernt habe. Datumszeitwerte sind wahrscheinlich eindeutig und daher keine guten Kandidaten für die Aggregation. Nicht ohne einige Arbeit, um einen Abschnitt der Daten Zeitwert zu isolieren.

0voto

Sean Punkte 7186

Fügen Sie eine GROUP BY-Klausel hinzu. Wenn das DateTime-Feld ein Datum und eine Uhrzeit speichert, müssen Sie die Daten nach Datum aggregieren, um den Tagesdurchschnitt wie in der folgenden Abfrage zu ermitteln:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X