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

Except etwas erweitert - Problem

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Michi_R, 10 Februar 2014.

  1. Michi_R

    Michi_R Fleissiger Benutzer

    Hallo Leute,

    ich bräuchte mal wieder eure Hilfe und ich bin mir sicher zusammen bekommen wir das hin:)

    Ich hab in einer Event Tabelle die 4 Spalten ID (eindeutige Nummer die ein Teil beschreibt), Type (Werte IN oder OUT) und Name (Werte T1 bis T20...beschreibt einen bestimmten Träger in den das Teil gestellt oder entnommen wird), Datum der Transaktion (datetime format, hab ich jetzt nicht ins Beispiel eingetragen). Die Event Tabelle kann dann so aussehen:

    unbenanntuyuaw.jpg
    Grün markiert sind die Zeilen die ich haben will.

    Ich möchte jetzt einen Query der mir sagt welche Teile gerade im Träger sind (also eine Liste aller Teile die sich in irgendeinem Träger T1 bis T20 befinden).

    Normal würde ich hier einen except nehmen, alle mit IN minus alle mit OUT, dann bleiben die übrig die noch kein OUT haben.
    Das Problem ist folgendes (s. Beispieltabelle): Es gibt Teile die erst mehrere INs haben (Prozessbedingt) und dann ein OUT für den Träger wo sie das neueste (Zeitlich, Datum ist auch dabei, falls das wichtig ist). Wenn ich jetzt mit except arbeite werden Teile die ein OUT haben dennoch für einen oder mehrere Träger angezeigt (da wo sie ein IN hatten aber kein OUT dazu).

    Ich bräuchte jetzt einen query der mit folgendes liefert:
    Falls nur IN: Teil anzeigen.
    Falls mehrere IN, dann NUR für den Träger anzeigen wo das neueste IN kam.
    Falls IN und OUT: Nicht anzeigen
    Falls mehrere IN und OUT passend zum neuesten IN: Nichts anzeigen.

    Ich bräuchte als eine Mischung aus Select max(date)....um die neusten INs zu bekommen und dann ein except aber das bekomm ich irgendwie nicht zusammen.

    Wäre super wenn wer helfen könnte.
    Danke!
     
    Zuletzt von einem Moderator bearbeitet: 10 Februar 2014
  2. Michi_R

    Michi_R Fleissiger Benutzer

    Mein Hauptproblem ist quasi:
    Wenn ich zuerst

    select max(date), id from event where type='IN' group by id

    mache, dann kann ich den Type nicht mitnehmen und Ohne Type kein Except :(
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Kannst doch dann dranjoinen, mit (max(date), id) kannst doch eindeutig den Typ finden, oder?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from michi order by id, name;
      id  | type | name
    ------+------+------
     1000 | in  |  1
     1000 | out  |  1
     1001 | in  |  2
     1001 | out  |  2
     1002 | in  |  3
     1003 | in  |  4
     1004 | in  |  5
     1004 | in  |  6
     1004 | in  |  7
     1005 | in  |  8
     1005 | in  |  9
     1005 | out  |  10
     1005 | in  |  10
    (13 rows)
    
    test=*# select * from michi where (id, name) in (select id, max(name) from michi where id not in ( select distinct id from michi where type = 'out') group by id order by id);
      id  | type | name
    ------+------+------
     1002 | in  |  3
     1004 | in  |  7
     1003 | in  |  4
    (3 rows)
    
    
     
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