SQL - nur Daten mit niedrigster ID ausgeben

winscheil

Aktiver Benutzer
Beiträge
25
Hallo, ich habe folgende Tabelle:

Projekt ID Notiz
12 1 abc
12 2 xyz
13 6 grt
13 8 lkt
15 3 dfg
15 4 rtz

Ich möchte immer nur die Notiz mit der niedrigsten ID von jedem Projekt ausgeben.
Also am Ende soll es so ausgegeben werden:
Projekt ID Notiz
12 1 abc
13 6 grt
15 3 dfg

Wie kann ich das machen?
Mit Top 1, distinct und min(id) hat es nicht funktioniert.
 
Werbung:
Code:
test=*# select * from winschell ;
 p  | id | notiz
----+----+-------
 12 |  1 | abc
 12 |  2 | xyz
 13 |  6 | grt
 13 |  8 | lkt
 15 |  3 | dfg
 15 |  4 | rtz
(6 Zeilen)

test=*# select p, id, notiz from (select *, row_number() over (partition by p order by id) from winschell) foo where row_number = 1 ;
 p  | id | notiz
----+----+-------
 12 |  1 | abc
 13 |  6 | grt
 15 |  3 | dfg
(3 Zeilen)

test=*# select * from winschell where (p, id) in (select p, min(id) from winschell group by p);
 p  | id | notiz
----+----+-------
 12 |  1 | abc
 13 |  6 | grt
 15 |  3 | dfg
(3 Zeilen)

test=*#
 
einen hab ich noch:

Code:
test=*# select distinct on (p) p, id, notiz from winschell order by p, id ;
 p  | id | notiz
----+----+-------
 12 |  1 | abc
 13 |  6 | grt
 15 |  3 | dfg
(3 Zeilen)

test=*#
 
okay, okay, einen hab ich noch ;-)

Code:
test=*# select * from winschell right join (select p, min(id) as id from winschell group by p) x using (p, id);
 p  | id | notiz
----+----+-------
 12 |  1 | abc
 13 |  6 | grt
 15 |  3 | dfg
(3 Zeilen)

test=*#
 
Oder so ...


Code:
SELECT t.Projekt, n.ID, n.Notiz
FROM yourTable t
LEFT JOIN yourTable n ON t.Projekt = n.Projekt and t.min(ID) = n.ID
GROUP by  t.Projekt;
 
so hat es funktioniert
SELECT
A.*
FROM TABLE AS A
INNER JOIN
(
SELECT
Projekt,
(MIN(ID)) AS "ID_min"
FROM TABLE
GROUP BY Projekt
) AS B
ON (A.Projekt= B.Projekt) AND (A.ID = B.ID_min

danke für die Hilfe
 
Werbung:
Zurück
Oben