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

Select Distinct mit 2. Bedingung?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von steffen007, 27 Februar 2017.

  1. steffen007

    steffen007 Neuer Benutzer

    Hallo Zusammen,

    ich habe eine Ausgangstabelle in folgendem Format:

    ID Gruppe Status
    1 a abgeschlossen
    2 a ausstehend
    3 b ausstehend
    4 b abgeschlossen
    5 c abgeschlossen
    6 d ausstehend

    Gewünschte Ausgabe: Ich würde gerne von jeder Gruppe einen Wert ausgeben. Falls zu der Gruppe 2 Einträge existieren, jedoch immer den mit dem Status "ausstehend".
    Probiert habe ich bis jetzt mit Distinct. Das Problem dabei ist, dass ich in diesem Beispiel folgende Tabelle erhalten würde:
    ID Gruppe Status
    1 a abgeschlossen
    3 b ausstehend
    5 c abgeschlossen
    6 d ausstehend

    Meine gewünschte Ausgabe sieht aber so aus:
    ID Gruppe Status
    2 a ausstehend
    3 b ausstehend
    5 c abgeschlossen
    6 d ausstehend

    Vielen Dank im Voraus!
     
  2. ukulele

    ukulele Datenbank-Guru

    Also leichter wäre soetwas mit Window-Funktionen die MySQL aber nicht kann.

    Wie bekommst du denn mit DISTINCT die gezeigte Ausgabe hin? Durch DISTINCT ID,Gruppe,Status müsstest du alle Zeilen zurück bekommen da die ID immer eindeutig ist.

    Wenn du nur Gruppe und den Status abfragst kannst du mit GROUP BY und max() arbeiten:
    Code:
    SELECT   Gruppe,
         max([Status]) AS [Status]
    FROM   tabelle
    GROUP BY Gruppe[/CODE
     
  3. steffen007

    steffen007 Neuer Benutzer

    Vielen Dank schon mal. Ich bräuchte allerdings alle Spalten der Tabelle (die originale Tabelle enthält noch weitere Spalten).
    Aktuell habe ich es mit "SELECT DISTINCT ON Gruppe *" probiert.

    PS: Es handelt sich um eine Postgresql Datenbank. Kann ich mein Thema verschieben?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Du Glücklicher mit PostgreSQL ;-)

    Code:
    test=*# select * from steffen007 ;
     id | gruppe |  status   
    ----+--------+---------------
      1 | a  | abgeschlossen
      2 | a  | ausstehend
      3 | b  | ausstehend
      4 | b  | abgeschlossen
      5 | c  | abgeschlossen
      6 | d  | ausstehend
    (6 rows)
    
    test=*# select id, gruppe, status from (select *, row_number() over (partition by gruppe order by case when status = 'ausstehend' then 0 else 1 end) from steffen007) foo where row_number = 1;
     id | gruppe |  status   
    ----+--------+---------------
      2 | a  | ausstehend
      3 | b  | ausstehend
      5 | c  | abgeschlossen
      6 | d  | ausstehend
    (4 rows)
    
    test=*#
    
     
    steffen007 gefällt das.
  5. steffen007

    steffen007 Neuer Benutzer

    Danke Euch! Das sieht super aus. Werde es dann gleich mal testen.
     
  6. steffen007

    steffen007 Neuer Benutzer

    Danke nochmal, macht genau das was ich will:)
     
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