speedi Geschrieben 9. Oktober 2008 Geschrieben 9. Oktober 2008 Hallo, ich habe hier eine Wetterdatenbank in der ich 2 Tabellen miteinander verknüpfen muss. In der einen Tabelle steht Windrichtung(int),TimeStamp(double) und in der anderen Windgeschwindigkeit(float), TimeStamp(double). Nun möchte ich eine Tabelle erstellen in welcher steht zu welcher Zeit der Wind wie stark war und aus welcher Richtung er kam. Prinzipiell nicht schwierig, jedoch werden Windgeschwindigkeit und Windrchtung nicht synchron gemessen. Nichtmal mit der gleichen frequenz. Die Windgeschwindigkeit wird mit einer Abtastrate von 10 Hz gemessen aber die Windrichtung wird völlig unregelmäßig in die Datenbank eingetragen. Hat jemand eine Idee wie die Abfrage nun lauten müsste?
OnkelPaddy Geschrieben 9. Oktober 2008 Geschrieben 9. Oktober 2008 Ein Ansatz wäre etwa select * from tabelle1 as a join tabelle 2 as b on substring(a.timestamp, 1, 10) = substring (b.timestamp, 1, 10) Natürlich müsste man das entsprechend dem DB System umsetzen. Also du kannst z.B. den Substring nach CHAR wandeln und dann nur die ersten Teile (z.B. bis 10er Minuten) prüfen.
flashpixx Geschrieben 9. Oktober 2008 Geschrieben 9. Oktober 2008 Da Du kein == hast, musst Du irgendwelche Zeitfenster nehmen, die Du aber selbst bestimmen musst: Da der Timestamp sich als Unixtimestamp (Sek. ab dem 1.1.1970) ausdrücken lässt würde analog auch so etwas gehen: Select wie von meinem Vorposter und das Join dann unixtimestamp(a.zeit) between unixtimestamp(b.zeit - b.zeit*0.1) unixtimestamp(b.zeit + b.zeit*0.1) Damit hast Du im Grunde eine Abweichung von +- 10% von Deiner aktuellen Zeit (Typenkonvertierung usw musst Du natürlich entsprechend vornehmen). Damit hättest Du ein "ungefähr" mit einer Abweichung von +-10% realisiert HTH Phil
speedi Geschrieben 10. Oktober 2008 Autor Geschrieben 10. Oktober 2008 Das Wort "Abweichung" ist gehört leider nicht zum Wortschatz meines Projektleiters wenn es um die reine Auswertung bereits erhobener Daten geht (auch wenn diese Zeitkritisch geschieht). Der TimeStamp ist ein float der die verstrichenen Sekunden (mit Dezimalstellen) seit Beginn der Simulation anzeigt. Habs jetzt so gemacht: SELECT * FROM windgeschwindigkeit LEFT OUTER JOIN windrichtung ON windgeschwindigkeit.TimeStamp = windgeschwindigkeit.TimeStamp Das hat zwar zur Folge, dass viele Einträge eine "NULL" enthalten, aber mein Programm greift dann einfach auf das letzte != null zurück.
speedi Geschrieben 10. Oktober 2008 Autor Geschrieben 10. Oktober 2008 Ach Sch****!!! Jetzt gibt er mir die Änderung der Windrichtung natürlich nur aus, wenn es dazu auch einen Datensatz Windgeschwindigkeit mit gleichen TimeStamp gibt. Ne Idee, wie ich es mache, dass er in dem Fall, dann einfach NULL-Werte bei Windgeschwindigkeit raushaut?
flashpixx Geschrieben 10. Oktober 2008 Geschrieben 10. Oktober 2008 Ich denke Dein Problem ist nicht das Datenbankproblem, sondern das inhaltliche. Du musst und das wäre mein Ratschlag, erst einmal überlegen was als Ergebnis herauskommen soll und die nächste Frage wäre dann, ist das mit diesen Daten, in dieser Form auch so möglich. Du kannst nichts auswerten, was nicht vorhanden ist! Löse das Problem nicht an der Spitze sondern an der Wurzel Phil
speedi Geschrieben 10. Oktober 2008 Autor Geschrieben 10. Oktober 2008 (bearbeitet) Also was mit helfen würde wäre eine Tabelle zu bekommen die in etwa so aufgebaut ist: Windgeschwindigkeit.TimeStamp | Windgeschwindigkeit | Windrichtung.TimeStamp | Windrichtung NULL | NULL | 1.25 | 270 2.74 | 35 | NULL | NULL 3.12 | 32 | 3.12 | 272 ... ... Also ich brauche die Windrichtung und die Windgeschwindigkeit geordnet nach TimeStamp. Wenn zu einem bestimmten TimeStamp kein Datensatz in der jeweiligen Tabelle vorhanden ist möchte ich einfach NULL drinstehen haben. Bearbeitet 10. Oktober 2008 von speedi
flashpixx Geschrieben 10. Oktober 2008 Geschrieben 10. Oktober 2008 Das ist im Grunde zwei Joins (left / right) und das Ergebnis via Union verbunden. Phil
allesweg Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 Full outer join... Join (SQL) - Wikipedia, the free encyclopedia
speedi Geschrieben 13. Oktober 2008 Autor Geschrieben 13. Oktober 2008 (bearbeitet) Ja. Den hab ich in wikipedia am Wochenende auch gefunden. Und bemerkt das MySQL das nicht kann. Hab jetzt aber Aufgrund deines Hinweises nochmal weiter gelesen und endlich bemerkt, dass darunter noch Alternativen aufgelistet sind, wie man das gleiche Ergebnis erreicht. Danke! Bearbeitet 13. Oktober 2008 von speedi
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden