sTumPf84 Geschrieben 6. Juni 2010 Teilen Geschrieben 6. Juni 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sTumPf84 Geschrieben 7. Juni 2010 Autor Teilen Geschrieben 7. Juni 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 8. Juni 2010 Teilen Geschrieben 8. Juni 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sTumPf84 Geschrieben 8. Juni 2010 Autor Teilen Geschrieben 8. Juni 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
smash Geschrieben 8. Juni 2010 Teilen Geschrieben 8. Juni 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sTumPf84 Geschrieben 9. Juni 2010 Autor Teilen Geschrieben 9. Juni 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.