1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Ordnung der Daten bei Abfrage durch MatLab

Dieses Thema im Forum "SQLite" wurde erstellt von gerrit1895, 18 Dezember 2019.

  1. gerrit1895

    gerrit1895 Neuer Benutzer

    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.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. gerrit1895

    gerrit1895 Neuer Benutzer

    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.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  5. gerrit1895

    gerrit1895 Neuer Benutzer

    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.
     
  6. gerrit1895

    gerrit1895 Neuer Benutzer

    Aber ich könnte mir ja quasi die Ids bei denen nicht 280 Punkte vorhanden sind, anzeigen lassen und diese per Hand vorher löschen.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    select id, count(1) from your_table group by id having count(1) != 280;

    mal so aus der Hüfte ...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden