2016-08-05 17 views
0

Ich habe ein Problem mit der Datenauswahl mit SQL in PostgreSQL-Datenbank.Wie wähle Gruppe von 2 Spalten + ID?

Ich habe folgende Daten in einer Tabelle:

ID ID_X ID_Y 
100 1  2 
101 1  1 
102 1  1 
103 1  2 
104 5  10 
105 5  11 
106 5  10 
107 5  11 
108 8  20 
109 8  30 
110 8  20 

Wie select-Anweisung schreiben, um die folgenden Ergebnisse zu bekommen?

ID ID_X ID_Y 
100 1  2 
101 1  1 
104 5  10 
105 5  11 
108 8  20 
109 8  30 

Ich weiß, dass es eine Art von Gruppe von ID_X und ID_Y ist aber, wie Spalte „ID“, indem sie es ohne die Gruppierung wählen auch?

Vielleicht gibt es eine Möglichkeit, mit distinct zu wählen? oder gruppieren mit mit subselect? Bitte helfen Sie :)

Antwort

2

Sie können eine Aggregatfunktion wie MIN() oder MAX() verwenden. In Ihrem Fall möchten Sie MIN(), um diese spezifischen Ergebnisse zu erhalten.

SELECT MIN(ID), ID_X, ID_Y 
FROM [tablename] 
GROUP BY ID_X, ID_Y 
0

Scheint, wie Sie eine GROUP BY wollen. Verwenden Sie MIN() jeder Gruppe niedrigsten ID zurückzukehren:

select min(ID), ID_X, ID_Y 
from tablename 
group by ID_X, ID_Y 

Alternativ können Sie tun, um eine NOT EXISTS:

select * 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t2.ID_X = t1.ID_X 
        and t2.ID_Y = t1.ID_Y 
        and t2.ID < t1.ID) 

D.h. eine Zeile zurückgeben, solange es keine (andere) Zeile mit gleicher ID_X und ID_Y aber niedrigerer ID gibt.

1

Versuchen Sie dies mit Distinct on

select * 
    from 
     (
     select distinct on (id_x, id_y) ID, id_x, id_y 
     FROM t order by id_x, id_y,id 
     ) q 
     order by id