hakdem91
Goto Top

SQL-Abfrage: (SCHWER) Anzahl der gemittelten Zahlenwerte Abfragen und wenn gleich 12 dann mit aufnehmen

Diese Frage zu stellen ist nicht sehr einfach. Ich hoffe ich kann es verständlich erklären.
Ich habe eine Tabelle mit Messwerten.
Die wie folgt aussieht:
Tabelle heißt: Messwerte_Temp_70_15

STATIONS_ID ;MESS_DATUM_BEGINN ;MESS_DATUM_ENDE ;QUALITAETS_NIVEAU ;ART ;LUFTTEMPERATUR_MAXIMUM ;LUFTTEMPERATUR ;LUFTTEMPERATUR_MINIMUM ;WINDSTAERKE ;BEDECKUNGSGRAD ;SONNENSCHEINDAUER ;NIEDERSCHLAGSHOEHE ;max(LUFTTEMPERATUR_MAXIMUM) ;min(LUFTTEMPERATUR_MINIMUM) ;max(WINDSPITZE_MAXIMUM) ;max(NIEDERSCHLAGSHOEHE)
1 19370101 19370131 5 1 3.3 0.0 -2.5 2.3 5.04 -999.0 42.1 9.5 -7.5 -999.0 11.5
1 19370201 19370228 5 1 5.3 2.3 -0.4 2.6 6.16 -999.0 87.6 14.4 -5.7 -999.0 13.6
1 19370301 19370331 5 1 7.3 3.1 0.1 2.4 5.28 -999.0 112.3 13.2 -5.4 -999.0 39.1
1 19370401 19370430 5 1 12.4 7.9 3.9 2.2 5.2 -999.0 74.1 18.0 -0.6 -999.0 28.2
1 19370501 19370531 5 1 20.7 14.5 8.6 1.6 3.92 -999.0 89.9 28.2 2.2 -999.0 25.0
1 19370601 19370630 5 1 23.2 17.1 11.4 1.3 3.92 -999.0 83.4 32.8 4.6 -999.0 17.2
1 19370701 19370731 5 1 23.6 17.7 11.7 1.3 4.24 -999.0 39.2 29.6 5.7 -999.0 16.6
1 19370801 19370831 5 1 23.9 17.3 12.2 1.4 4.32 -999.0 73.4 32.8 7.4 -999.0 15.9
1 19370901 19370930 5 1 18.4 12.7 9.1 1.2 4.64 -999.0 138.6 28.6 4.2 -999.0 21.2
1 19371001 19371031 5 1 13.7 8.8 4.8 1.1 5.04 -999.0 26.6 25.0 -1.2 -999.0 7.0
1 19371101 19371130 5 1 6.4 3.0 0.3 1.3 5.36 -999.0 28.2 11.0 -5.4 -999.0 9.6
1 19371201 19371231 5 1 1.3 -1.4 -3.5 1.5 6.24 -999.0 21.1 5.0 -11.0 -999.0 4.6
1 19380101 19380131 5 1 2.8 0.1 -2.3 1.6 6.8 -999.0 93.3 10.2 -13.0 -999.0 11.8
1 19380201 19380228 5 1 4.0 -0.1 -3.3 1.9 4.88 -999.0 22.1 10.0 -7.0 -999.0 9.5
1 19380301 19380331 5 1 14.7 7.4 1.4 1.2 2.0 -999.0 7.1 19.6 -3.6 -999.0 4.7
1197 19730101 19730131 5 1 0.8 -1.2 -3.7 0.9 6.72 9.3 20.7 5.5 -9.0 -999.0 8.2
5107 19910901 19910930 10 1 19.4 13.3 8.0 1.8 4.0 -999.0 50.4 26.2 2.7 -999.0 18.8

Mein Ziel ist es zu einer Station einen Jahresmittelwert der Temperatur zu erstellen und Lufttemperaturwerte = -999
raus zu filtern und nach Stations_ID zu sortieren.

MEINE ABFRAGE BIS JETZT:

SELECT STATIONS_ID, MESS_DATUM_BEGINN, MESS_DATUM_ENDE,
ROUND(AVG(LUFTTEMPERATUR),3) AS Lufttemperatur,
COUNT(*)/2 AS Anzahl_Monate
FROM Messwerte_Temp_70_15
WHERE MESS_DATUM_BEGINN LIKE '2000%' AND LUFTTEMPERATUR IS NOT '-999'
GROUP BY STATIONS_ID
Daraus resultiert diese Tabelle:

STATIONS_ID MESS_DATUM_BEGINN MESS_DATUM_ENDE Lufttemperatur Anzahl_Monate
71 20001201 20001231 8.6 12
238 20001201 20001231 9.375 12
257 20001201 20001231 10.783 12
259 20001201 20001231 10.858 12
576 20001201 20001231 9.708 12
706 20001201 20001231 11.558 12
710 20001201 20001231 10.858 12
3268 20001001 20001031 12.725 4
3402 20001201 20001231 8.175 12
3603 20001201 20001231 11.333 3
4719 20000601 20000630 7.85 4
JETZT KOMMT DER ENTSCHEIDENDE PUNKT!!!
Ich möchte Jahresmittelwerte nicht aufnehmen die unvollständig sind. Also will ich nur Werte haben die zur Mittelwertberechnung 12 Werte gemittelt wurden(Anzahl_Monate). Wie kann ich in dieser Abfrage noch zusätzlich diese Zeilen eliminieren(Alle unter 12). WICHTIG: ES SOLL IN DIESER EINEN ABFRAGE GESCHEHEN. UND NICHT IN EINER ZUSÄTZLICHEN!

Hoffe das ganze war einigermaßen verständlich.

Content-Key: 291815

Url: https://administrator.de/contentid/291815

Printed on: April 25, 2024 at 06:04 o'clock

Member: BirdyB
BirdyB Dec 28, 2015 at 18:14:55 (UTC)
Goto Top
Hi,

du könntest deine bisherige Abfrage einfach zubeinem Subselect machen und diesen dann filtern...

Beste Grüße!

Berthold
Member: Friemler
Solution Friemler Dec 28, 2015 updated at 20:46:01 (UTC)
Goto Top
Hallo,

suchst Du etwas in der Art?:
SELECT   STATIONS_ID AS IdStation,
         SUBSTRING(MESS_DATUM_BEGINN, 1, 4) AS Jahr,
         ROUND(AVG(LUFTTEMPERATUR), 3) AS MittlereLufttemperatur

FROM     Messwerte_Temp_70_15

WHERE    LUFTTEMPERATUR <> -999

GROUP BY STATIONS_ID,
         SUBSTRING(MESS_DATUM_BEGINN, 1, 4)

HAVING   COUNT(*) = 12

ORDER BY IdStation,
         Jahr

Gruß
Friemler
Member: hakdem91
hakdem91 Dec 28, 2015 at 20:45:54 (UTC)
Goto Top
Okay,

war wohl doch nicht so schwer wie ich es dachte :D

HAVING COUNT(*)/2 = 12 hat mir nur gefehlt.

Weißt du warum er bei COUNT(*) = 24 anstatt 12 herausbekommt?
Er gibt immer das doppelte aus, so dass ich immer mit COUNT(*)/2 korrigieren muss.

Jedenfalls danke für deine Hilfe.

Gruß hakdem
Member: hakdem91
hakdem91 Dec 28, 2015 at 20:46:47 (UTC)
Goto Top
Wurde gelöst....

Danke trotzdem

Gruß
hakdem