Zum Inhalt springen

Join von 2 Tabellen ohne immer gleiche Fremdschlüssel


speedi

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von speedi
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von speedi
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...