Merkmalsvergleich innerhalb Gruppe über mehrere Zeilen

hooolla

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich in absoluter Neuling in SQL und stehe gerade vor einem Problem, dessen Lösung sich mir nicht erschließt.

Ich habe eine Datenbank mit Abonnements zu Kunden, die als gekündigt oder aktiv dargestellt werden. Das Problem ist nun, dass ein Kunde mehrere Abonnements haben kann, von denen einige aktiv, andere wiederum gekündigt sind.

Jede Zeile beschreibt ein Abonnement. Ich muss nun die Kunden identifizieren, die NUR gekündigte haben. Besteht die Möglichkeit zunächst die einzelnen Kunden zusammenzufassen und dann zu prüfen, ob etwas anderes als Kündigungen vorliegen?

Zur Veranschaulichung:

Abo1 aktiv Kunde 1
Abo2 gekündigt Kunde 1
Abo3 gekündigt Kunde 1
Abo1 aktiv Kunde 2
Abo1 gekündigt Kunde 3

Als Ergebnis würde hier dann nur Kunde 3 erwartet.

Vorab vielen Dank für eure Hilfe.

Viele Grüße
Hooolla
 
Werbung:
Code:
test=*# select * from hoolla ;
 abo | kunde | aktiv
-----+-------+-------
   1 |     1 | t
   2 |     1 | f
   3 |     1 | f
   1 |     2 | t
   1 |     3 | f
(5 rows)

test=*# with temp as (select kunde, count(abo) abos, count(aktiv) filter (where aktiv) as aktiv from hoolla group by kunde) select * from temp;
 kunde | abos | aktiv
-------+------+-------
     3 |    1 |     0
     2 |    1 |     1
     1 |    3 |     1
(3 rows)

test=*# with temp as (select kunde, count(abo) abos, count(aktiv) filter (where aktiv) as aktiv from hoolla group by kunde) select * from temp where abos = aktiv;
 kunde | abos | aktiv
-------+------+-------
     2 |    1 |     1
(1 row)

test=*#

Ist jetzt aber PostgreSQL, aber Du siehst den Weg?
 
Oder Selfjoin
Code:
SELECT    t1.kunde
FROM    tabelle t1
LEFT JOIN tabelle t2
ON        t1.kunde = t2.kunde
AND        t2.status = 'aktiv'
WHERE    t2.kunde IS NULL
 
Noch bin ich nicht ganz bei euch aber vielen lieben Dank schon mal für eure Hilfe. Das Beispiel von akretschmer würde nur Kunden mit Status aktiv filtern, ich muss aber genau die finden, die NUR gekündigt sind und keine aktiven Abos mehr haben. Kunden, die beide Stati haben, sind noch aktiv und fallen raus. Ich hab also zu manchen Kunden 10 Abos, davon sind 9 gekündigt, 1 ist aktiv --> Kunde ist aktiv. Wie finde ich nun Kunden raus, die NUR gekündigt sind? Also wie lass ich SQL über x Zeilen eine Kundennummer durchgehen?
 
Werbung:
Zurück
Oben