Abfrage von Gemeinschaftskunden - Geburtsdaten

Fragen und Probleme rund um die Abfragespache SQL.

Abfrage von Gemeinschaftskunden - Geburtsdaten

Beitragvon toni_83 » Do 9. Aug 2012, 11:17

Hallo zusammen,

gegeben sind folgende Tabellen:

Code: Alles auswählen
BRP=# select * from testkunden;
 personennr | nachname |           vorname            | geburtsdatum
------------+----------+------------------------------+--------------
 0000000001 | Meier    | Markus                       | 1980-01-01
 0000000002 | Meier    | Maria                        | 1990-01-01
 0000000003 | Meier    | Markus und Maria             |
 0000000004 | Müller   | Angela                       | 1950-01-01
 0000000005 | Huber    | Angela                       | 1970-01-01
 0000000006 | Huber    | Ariane                       | 1976-01-01
 0000000007 | Huber    | Annabella                    | 1978-01-01
 0000000008 | Huber    | Angela, Ariane und Annabella |
(8 rows)


Code: Alles auswählen
BRP=# select * from testkunden_beziehungen;
 personennr | personennr_2_kunde
------------+--------------------
 0000000003 | 0000000001
 0000000003 | 0000000002
 0000000008 | 0000000005
 0000000008 | 0000000006
 0000000008 | 0000000007
(5 rows)


Wie man sieht, sind manche Kunden alleine, manche haben zusätzlich zur eigenen noch eine gemeinsame Kundennummer.

Nun möchte ich:
1. alle Kunden (wenn ein gemeinsamer Kundenstamm vorhanden ist nur diesen, ansonsten den einzelnen), die vor dem 31. Mai 1981 geboren sind
2. wie 1., allerdings dass nur die gemeinsamen Kundenstämme angezeigt werden, bei denen alle Kunden vor dem 31. Mai 1981 geboren sind.

Nr. 1 ist soweit kein Problem, zwar nicht elegant, aber es geht:

Code: Alles auswählen
BRP=# select distinct a.personennr, a.nachname, a.vorname, a.geburtsdatum from testkunden a
BRP-# left join testkunden_beziehungen b
BRP-# on a.personennr = b.personennr
BRP-# where
BRP-# (
BRP(# a.geburtsdatum < '1981-05-31' or a.personennr in
BRP(# (select distinct a.personennr from testkunden_beziehungen a inner join testkunden b on a.personennr_2_kunde =  b.personennr where b.geburtsdatum < '1981-05-31')
BRP(# )
BRP-# and a.personennr not in (select distinct personennr_2_kunde from testkunden_beziehungen);
 personennr | nachname |           vorname            | geburtsdatum
------------+----------+------------------------------+--------------
 0000000008 | Huber    | Angela, Ariane und Annabella |
 0000000003 | Meier    | Markus und Maria             |
 0000000004 | Müller   | Angela                       | 1950-01-01
(3 rows)


Bei meiner zweiten Abfrage dürfte also die Personennr 0000000003 nicht mehr im Ergebnis sein.

Habt ihr einen guten Ansatz für mich, ggf. auch zur "verschönerung" der 1. Abfrage?

Achja,....
Code: Alles auswählen
BRP=# select version();
                                                                version
----------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.4.4 on x86_64-unknown-linux-gnu, compiled by GCC gcc (SUSE Linux) 4.5.0 20100604 [gcc-4_5-branch revision 160292], 64-bit
(1 row)


Eine neuere Version ist leider nicht möglich.


Danke + Gruß
Toni
wer bis zum hals in der scheisse steckt, der sollte den kopf nicht hängen lassen
toni_83
Benutzer
 
Beiträge: 48
Registriert: Di 8. Jul 2008, 11:05

Beitragvon akretschmer » Do 9. Aug 2012, 11:56

toni_83 hat geschrieben:
Bei meiner zweiten Abfrage dürfte also die Personennr 0000000003 nicht mehr im Ergebnis sein.

Habt ihr einen guten Ansatz für mich, ggf. auch zur "verschönerung" der 1. Abfrage?





Code: Alles auswählen
test=*# select a.*, b.geburtsdatum from testkunden_beziehungen a left join testkunden b on a.personennr_2_kunde=b.personennr where geburtsdatum >  '1981-05-31'::date;
 personennr | personennr_2_kunde | geburtsdatum
------------+--------------------+--------------
 003        | 002                | 1990-01-01
(1 row)


als Ansatz ...

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5938
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon toni_83 » Do 9. Aug 2012, 15:06

Ah, Danke :)
wer bis zum hals in der scheisse steckt, der sollte den kopf nicht hängen lassen
toni_83
Benutzer
 
Beiträge: 48
Registriert: Di 8. Jul 2008, 11:05


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste