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

Ausgefallene Zughalte mehrerer Linien

Dieses Thema im Forum "Microsoft Access" wurde erstellt von domi5599, 25 April 2019.

  1. domi5599

    domi5599 Neuer Benutzer

    Ich will für ein Projekt die ausgefallenen Stationshalte von 11 Linien an einem Tag abfragen. Als Ausgang dient eine Tabelle, die für vier Tage alle Zugfahrten mit allen angefahrenen Halten auflistet. Als erstes habe ich alle geplanten Stationshalte pro Linie für den ersten Tag schon abgefragt. Jetzt frage ich mich wie ich die ausgefallenen Stationshalte abfrage?
    Mein Ansatz ist, dass in der Abfrage nach den Zughalten gefragt wird für die keine Zeit hinterlegt wurde, wo die Züge also entweder nie ankamen oder nie abfuhren.
    Abfrage für einen Tag mit geplanten Stationshalten
    Code:
    SELECT BTG, LIN, COUNT(*) AS Stationsanzahl_Plan
    FROM ZUEGE_PLAN
    WHERE BTG = CDATE("24.09.2013")
    GROUP BY BTG, LIN
    HAVING LIN="S4" OR LIN="S5" OR LIN="S6" OR LIN="S6" OR LIN="S7" OR LIN="S8" OR LIN="S9" OR LIN="S10" OR LIN="S11" OR LIN="S12" OR LIN="S13" OR LIN="S14"
    ORDER BY COUNT(*) DESC;
    
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Hrm, weiß nicht, ob ich Dich korrekt verstehe. Mal angenommen, es gibt die Stationen 1,2,3,4 und 5, und diese Züge sind gefahren:

    Code:
    test=*# select * from zuege ;
       datum    | station
    ------------+---------
     2019-04-25 |       1
     2019-04-25 |       2
     2019-04-25 |       3
     2019-04-25 |       5
     2019-04-24 |       1
     2019-04-24 |       2
     2019-04-24 |       4
     2019-04-24 |       5
    (8 rows)
    
    Heute z.B. ist der ICE mal wieder an Bielefeld vorbeigedonnert (Station 4). Dies können wir so abfragen:

    Code:
    test=*# select * from unnest(array[1,2,3,4,5]) as station left join (select * from zuege where datum = current_date) z  on station.station = z.station where datum is null;
     station | datum | station
    ---------+-------+---------
           4 |       |       
    (1 row)
    
    Das ist jetzt allerdings kein Access, sondern eine richtige Datenbank, PostgreSQL. Stimmt aber erst einmal das Resultat für Dich?
     
  3. domi5599

    domi5599 Neuer Benutzer

    Das Resultat dürfte tatsächlich stimmen.
    Ich versuch mal dein Vorschlag irgendwie in Access zu übertragen.
    Schon mal Danke für die Hilfe.

    Leider ist die Datenbank zu groß um sie hochzuladen.
     
  4. ukulele

    ukulele Datenbank-Guru

    Das läßt sich auch ganz klassisch mit einem Join lösen. Du nimmst die Planwerte und machst einen LEFT JOIN mit den Ist-Werten. Dann schließt du per WHERE-Klausel alle Datensätze aus zu denen Ist-Werte existieren, also die Haltestellen die tatsächlich angefahren wurden. Übrig bleibt logischerweise alles was geplant aber nicht angefahren wurde.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Die Plan-Werte sind in meinem array, was ich durch unnest() zu einer Tabelle mache...
     
  6. ukulele

    ukulele Datenbank-Guru

    Natürlich aber auch dir dürfte klar sein das das sehr PG-spezifisch ist und er sich jetzt einen Wolf sucht nach Alternativen dabei braucht er doch nur einen Join.
     

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