1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Abfrage über gleiche Geburtsdaten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Traumkind, 22 Mai 2020 um 14:32 Uhr.

  1. Traumkind

    Traumkind Benutzer

    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
     
  2. Traumkind

    Traumkind Benutzer

     
  3. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  4. Traumkind

    Traumkind Benutzer

    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
     
  5. Traumkind

    Traumkind Benutzer

    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 :)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Nein. Was gefällt Dir an meiner Lösung nicht?
     
  7. Traumkind

    Traumkind Benutzer

    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
     
  8. Traumkind

    Traumkind Benutzer

    Um Gottes Willen, ich kann deine Lösung nicht beanstanden, ich brauche nur eine andere Ausgabe, das ist alles :)
     
  9. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  10. Traumkind

    Traumkind Benutzer

    Ja, danke das hat mir sehr geholfen :) jetzt gehts *freu*
     
    akretschmer gefällt das.
  11. akretschmer

    akretschmer Datenbank-Guru

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