Zum Inhalt springen

Berechnungen über mehrere Zeilen in Tabelle eintragen


sTumPf84

Empfohlene Beiträge

Hallo,

Ich habe folgendes Problem:

Ich habe eine Tabelle mit Wetterdaten.

Für jeden Tag gibt es bis zu 24 Messwerte.

Jetzt möchte ich z.B. die Summe der Sonnenscheindauer(Spalte RR1) des jeweiligen Tages ermitteln.

Soweit kein Problem:

SELECT CAST(d.DATE AS date) AS Datum,SUM(d.RR1) AS Sonnenscheindauer

FROM Data AS d

GROUP BY CAST(d.DATE as date)

ORDER BY CAST(d.DATE as date)

Die Spalte d.DATE ist vom Typ DateTime, deswegen der CAST.

Damit bekomme ich für jeden Tag die gesammte Sonnenscheindauer.

Jetzt möchte ich aber die Werte in eine Spalte (RR1_24) meiner Tabelle eintragen.

Dabei soll für alle Zeilen des selben Tages der ermittelte Wert eingetragen werden.

Ich habe keine Ahnung wie ich das realisieren kann.

Am liebsten währe mir eine berechnende Spalte, die die Werte automatisch einträgt, das funktioniert aber nicht, da in einer berechnenden Spalte nur auf Spalten der selben Zeile zugegriffen werden kann.

Die Berechnung sollte möglichst einfach und vor allem schnell sein, da die zu aktualisierenden Daten um die 200.000 Zeilen umfasst.

Danke im Voraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab jetzt ne Möglichkeit gefunden:

UPDATE Data

SET Data.RR1_24 = d.RR1_24

FROM

(

SELECT CAST(d2.DATE as date) AS DATUM,SUM(d2.RR1) AS RR1_24

FROM Data AS d2

GROUP BY CAST(d2.DATE as date)

) as d

WHERE CAST(Data..DATE as DATE) = d.DATUM;

Wenn jemand eine elegantere Lösung hat, würde ich mich freuen, denn ich muss noch ca 20 solche Berechnungen einfügen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

warum nicht mit einer VIEW?

spalten deren werte durch berechnung aus anderen spalten zustande kommen, gehören meiner meinung nach nicht in eine physische tabelle.

wenn du nur das sub-select aus dem letzten post für die VIEW nutzt hättest du dann zu jedem datum die anzahl der sonnenstunden.

zumindest funktioniert das mit simplen Datentypen in SQLite

Link zu diesem Kommentar
Auf anderen Seiten teilen

Prinzipiell der bessere Weg, klar.

Hab aber das Problem, dass ich sobald in einem Messwert, eines Tages, ein Fehlerwert steht, die Berechnung des gesamten Tages einen Fehlerwert ausgeben soll.

Bei der View werden die Berechnungen auch über die Fehlerwerte (meist -99 oder -999) ausgeführt.

Desweiteren sollen alle Tageswerte(RR1_24 ist so einer) die weniger als 24 Stundenwerte enthalten auch einen Fehlerwert ausgeben.

Hoffe das war soweit verständlich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Prinzipiell der bessere Weg, klar.

Hab aber das Problem, dass ich sobald in einem Messwert, eines Tages, ein Fehlerwert steht, die Berechnung des gesamten Tages einen Fehlerwert ausgeben soll.

Bei der View werden die Berechnungen auch über die Fehlerwerte (meist -99 oder -999) ausgeführt.

Ist das denn bei deiner jetztigen Lösung anders?

Desweiteren sollen alle Tageswerte(RR1_24 ist so einer) die weniger als 24 Stundenwerte enthalten auch einen Fehlerwert ausgeben.

Hoffe das war soweit verständlich.

Da könnte man ja auch die Daten aus der Datenbank holen und in der Anwendung entsprechend verarbeiten. Da bist du ja viel flexibler. Könnte natürlich sein, dass das etwas länger dauert. Würde ich aber mal ausprobieren. Wäre vermutlich die sauberere Lösung. Oder du guckst mal ob dir StoredProcedures weiterhelfen. Um welches DBMS geht es denn?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist das denn bei deiner jetztigen Lösung anders?

So wie ich es geschrieben hatte nein.

Ging mir in dem Fall nur um die generelle Art und Weise.

Hab ne StoredProcedure draus gemacht, die nach dem Update noch alle Fehlerwerte nachgetragen hatte.

Ziemlich dreckig, ich weiß.:(

Da könnte man ja auch die Daten aus der Datenbank holen und in der Anwendung entsprechend verarbeiten. Da bist du ja viel flexibler. Könnte natürlich sein, dass das etwas länger dauert. Würde ich aber mal ausprobieren. Wäre vermutlich die sauberere Lösung.

Hab ich mir auch gedacht, aber bei den riesigen Datenmengen wäre das nicht grad klug. Ausserdem benötigen die Berechnungen Werte über die Auswahl hinaus, so dass ich die Berechnungen auf der Datenbank ausführen muss.

Um welches DBMS geht es denn?

SQLServer 2008

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...