Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Berechnungen über mehrere Zeilen in Tabelle eintragen

Empfohlene Antworten

Veröffentlicht

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

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.

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

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.

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?

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.