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.

Empfohlene Antworten

Veröffentlicht

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?

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.

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

  • Autor

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.

  • Autor

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?

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

  • Autor

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

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

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.