Select Distinct mit 2. Bedingung?

steffen007

Neuer Benutzer
Beiträge
4
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!
 
Werbung:
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
 
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?
 
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=*#
 
Werbung:
Zurück
Oben