Ordnung der Daten bei Abfrage durch MatLab

gerrit1895

Neuer Benutzer
Beiträge
4
Guten Abend,

ich habe folgendes Problem. In meiner Datenbank befinden sich 3 Tabellen, die über eine AeroDataId verknüpft sind. In den Tabellen AeroSettings und AeroData ist dabei der Zustandspunkt beschrieben. Die Tabelle MsesData enthält für jeden Zustandspunkt, also jede AeroDataId, 280 Punkte die nach Ober- und Unterseite des Flügelprofils georndet sind. Mit der untenstehenden Query wird zwar die Reihenfolge der Daten nicht verändert, was sehr wichtig für mich ist, aber es kommen viel zu viele Daten zurück, so dass es Tage dauern würde, bis alle Daten in Matlab geladen sind.

Aus diesem Grund möchte ich eigentlich schon vorher in der Query mit einem WHERE Befehl die Daten ausdünnen. Dies funktioniert auch, allerdings werden die Daten neu angeorndet, so dass nicht mehr zwischen Ober- und Unterseite unterschieden werden kann. Gibt es eine Möglichkeit, trotz WHERE Bedingung die Sortierung zu behalten? ORDER BY ist leider keine Option, da immer 140 Punkte der Oberseite und dann 140 Punkte der Unterseite in der originalen Datenbank dargestellt sind.

Meine Sql-Query lautet: SELECT DISTINCT MsesData.X_C, MsesData.CP, AeroSettings.Ma, AeroData.CL_res, AeroSettings.ReynoldsNumber, AeroSettings.AirfoilId, AeroSettings.Transition, MsesData.AeroDataId FROM MsesData INNER JOIN (AeroData INNER JOIN AeroSettings ON AeroSettings.AeroDataId=AeroData.AeroDataId) ON AeroData.AeroDataId=MsesData.AeroDataId

Ich hoffe sehr, dass ihr mir helfen könnt.

Vielen Dank.
 
Werbung:
auch wenn ich das ganze jetzt nicht wirklich verstanden habe: Datenbanken arbeiten mit Mengen, die per se unsortiert sind. Wenn diese Daten in deiner Abfrage ohne WHERE in einer Dir angenehm erscheinenden Sortierung rauskommen, dann ist das mehr oder weniger zufällig. (siehe PostgreSQL und synchronised sequential scanning, postgresql.conf param synchronize_seqscans • postgresqlCO.NF).

Von daher: wenn Du eine Sortierung willst, dann sage es. Das Zauberwort ist: ORDER BY. Notfalls wirst Du Spalten in der Abfrage generieren müssen, z.B. via row_number(), und nach diesen Dein WHERE und ORDER BY ausrichten.
 
Hi,
danke für deine Antowrt. Ich versuche dir nochmal das Problem und meine neuen Lösungsansatz zu schildern.

Alsoooo ich habe in meiner Datenbank eine Tabelle, in der abwechselnd 140 für die Unterseite eines Flügelprofils eine Flugzeuges und 140 für die Oberseite drin stehen. Und das immer wieder für verschiedene Geschwindigkeiten, Flughöhen usw. Also 140 Punkte auf der Unterseite, dann 140 Punkte auf der Oberseite bei einer Id=0 und dann wieder für id=1 140 Punkte auf der Unterseite usw. Und dies für 693390 Ids. In Matlab brauche ich diese Unterteilung zwischen Ober- und Unterseite. Da ich mit ORDER BY nur aufsteigend oder absteigend sortieren kann, werden ja Oberseite und Unterseite vermischt in Matlab geladen. Also zur Veranschaulichung mit Punkten auf der Ober und Unterseite meine ich die X-Koordinate.

Mein neuer Lösungsansatz wäre quasi die Daten erstmal gar nicht auszulesen, sondern in der Datenbank eine weitere Spalte zu erstellen, in der z.B. eine 0 für Oberseite und eine 1 für die Unterseite steht. Dann könnte man mit Where ganz einfach danch filtern.

Weißt du zufällig, ob dies möglich ist?

Vielen Dank.
 
Das klingt - abenteuerlich. Was ist, wenn bei Datensatz 470815 mal von den 140 Punkten 3 fehlen? Dann kommt die ganze Sache zum scheitern, oder? Wer denkt sich sowas aus?
Und ja: wenn es Dir gelingt, jetzt da noch das fehlende Merkmal Unter/Oberseite fehlerfrei zu integrieren, dann solltest Du das tun. Beachte: durch ein Update kann sich schon die physische Reihenfolge der Datensätze ändern ... und Du scheinst Dich auf diese physische Reihenfolge zu verlassen.
 
ja, da bin ich auch gerade dabei zu überlegen. Ich weiß, dass bei manchen Id´s 70 Punkte auf der Oberseite und 70 auf der Unterseite sind. Ich glaube, als die Datenbank erstellt wurde, wurde noch nicht daran gedacht, was ich jetzt damit mache oder das Programm, welches diese erstellt, kann icht zwischen Ober und Unterseite unterscheiden.

Aus diesem Grund hatte ich in Matlab auch in meine If Bedingung eingebaut, dass die Id genau 280 mal vorkommen muss. Aber das Matlab Programm würde Tage laufen, um alles zu sortieren.
 
Werbung:
Zurück
Oben