Abfrage über gleiche Geburtsdaten

Traumkind

Benutzer
Beiträge
7
Hallo,

ich bin neu und habe derzeit ein kleines Problem.

Ich möchte die Datensätze einer Tabelle mit IDnr ausgeben, die am selben Tag Geburtstag haben.

Ich habe diese Abfrage gestartet
select pnr, group_concat(pnr asc SEPARATOR ',') as gleicherGeburtstagwie
from mitarbeiter
group by pnr having (count(gebdat)>1)

pnr ist hierbei meine ID und ich möchte quasi in der zweiten Spalte, die pnr mit dem Komma getrennt ausgegeben bekommen. Was mache ich falsch?

Vielen Dank vorab für die Hilfe.

LG Traumkind
 
Werbung:
Hallo,

ich bin neu und habe derzeit ein kleines Problem.

Ich möchte die Datensätze einer Tabelle mit IDnr ausgeben, die am selben Tag Geburtstag haben.

Ich habe diese Abfrage gestartet
select pnr, group_concat(pnr asc SEPARATOR ',') as gleicherGeburtstagwie
from mitarbeiter
group by pnr having (count(gebdat)>1)

pnr ist hierbei meine ID und ich möchte quasi in der zweiten Spalte, die pnr mit dem Komma getrennt ausgegeben bekommen. Was mache ich falsch?

Vielen Dank vorab für die Hilfe.

LG Traumkind
 
Was ist selber Tag, ist der 1.1.1990 = 1.1.1991?

Code:
test=*# \d traumkind
              Table "public.traumkind"
 Column  |  Type   | Collation | Nullable | Default
---------+---------+-----------+----------+---------
 pnr     | integer |           | not null |
 gebdate | date    |           |          |
Indexes:
    "traumkind_pkey" PRIMARY KEY, btree (pnr)

test=*# select * from traumkind ;
 pnr |  gebdate   
-----+------------
   1 | 1990-01-01
   2 | 1991-01-01
   3 | 1991-01-01
   4 | 2000-02-02
(4 rows)

test=*# select gebdate, count(1) , string_agg(pnr::text, ', ') from traumkind group by gebdate having count(1) > 1;
  gebdate   | count | string_agg
------------+-------+------------
 1991-01-01 |     2 | 2, 3
(1 row)

test=*#
 
Ich habe nun meine Abfrage etwas abgeändert

SELECT pnr, group_concat(pnr) ASgleicherGeburtstagwie
FROM mitarbeiter AS m1
WHERE EXISTS(SELECT pnr FROM mitarbeiter AS m2
WHERE m1.gebdat = m2.gebdat)
GROUP BY gebdat HAVING COUNT (gebdat)>1;

hier gibt er mir zwar etwas aus, allerdings eine falsche Ausgabe. Ich möchte alle pnr haben, er sagt mir aber nur welche pnr überhaupt ein gleiches Geburtsdatum haben und nicht welche wirklich am selben Tag geboren sind. Ich weiß nicht, ob das jetzt verständlich rüber kam
 
Was ist selber Tag, ist der 1.1.1990 = 1.1.1991?

Code:
test=*# \d traumkind
              Table "public.traumkind"
 Column  |  Type   | Collation | Nullable | Default
---------+---------+-----------+----------+---------
 pnr     | integer |           | not null |
 gebdate | date    |           |          |
Indexes:
    "traumkind_pkey" PRIMARY KEY, btree (pnr)

test=*# select * from traumkind ;
 pnr |  gebdate  
-----+------------
   1 | 1990-01-01
   2 | 1991-01-01
   3 | 1991-01-01
   4 | 2000-02-02
(4 rows)

test=*# select gebdate, count(1) , string_agg(pnr::text, ', ') from traumkind group by gebdate having count(1) > 1;
  gebdate   | count | string_agg
------------+-------+------------
 1991-01-01 |     2 | 2, 3
(1 row)

test=*#

Danke für die Antwort

es soll auch das gleiche Jahr mitberücksichtigt werden. Ich denke vielleicht schaffe ich es mit deiner Hilfe, danke auf jeden Fall, ich versuchs mal :)
 
Ich bräuchte eine Ausgabe in der Form

pnr | gleicherGeburtstagwie
7 | 9, 27
9 | 7,27
23 | 24
24 | 23
27 | 7,9

und im Moment gibt er mir nur

24 | 24,23
27 | 27,7,9
 
Code:
test=*# select * from traumkind ;
 pnr |  gebdate   
-----+------------
   1 | 1990-01-01
   2 | 1991-01-01
   3 | 1991-01-01
   4 | 2000-02-02
(4 rows)

test=*# with x as (select t1.pnr p1, t2.pnr p2 from traumkind t1 cross join (select * from traumkind) t2 where (t1.gebdate = t2.gebdate)) select p1 as pnr, array_to_string(array_remove(array_agg(p2),p1),', ') as zusammemmit from x group by p1 order by p1;
 pnr | zusammemmit
-----+-------------
   1 |
   2 | 3
   3 | 2
   4 |
(4 rows)

test=*#

So?
 
Code:
test=*# select * from traumkind ;
 pnr |  gebdate  
-----+------------
   1 | 1990-01-01
   2 | 1991-01-01
   3 | 1991-01-01
   4 | 2000-02-02
(4 rows)

test=*# with x as (select t1.pnr p1, t2.pnr p2 from traumkind t1 cross join (select * from traumkind) t2 where (t1.gebdate = t2.gebdate)) select p1 as pnr, array_to_string(array_remove(array_agg(p2),p1),', ') as zusammemmit from x group by p1 order by p1;
 pnr | zusammemmit
-----+-------------
   1 |
   2 | 3
   3 | 2
   4 |
(4 rows)

test=*#

So?

Ja, danke das hat mir sehr geholfen :) jetzt gehts *freu*
 
Werbung:
Zurück
Oben