Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Niepowracający klienci

30 views
Skip to first unread message

Radziwil

unread,
Sep 3, 2020, 8:22:43 AM9/3/20
to
Hej

Poszukuję najprostszego rozwiązania, jak wybrać z tabeli np.:
ID, IDKlient, Data
wszystkich klientów, którzy kupili pizze w zadanym przedziale czasu i nie zamówili już nigdy więcej.

Pozdrawiam
Darek

Tomek

unread,
Sep 3, 2020, 9:21:29 AM9/3/20
to
W dniu 03.09.2020 o 14:22, Radziwil pisze:
Coś w tym stylu

SELECT w1.IDKlient
FROM tabela w1
LEFT JOIN tabela w2
ON w2.IDKlient = w1.IDKlient AND w2.Data > '2020-08-25'
WHERE 1
AND w1.Data >= '2020-08-20'
AND w1.Data <= '2020-08-25'
AND w2.id IS NULL

Radziwil

unread,
Sep 3, 2020, 9:34:29 AM9/3/20
to
Rozwiązanie okazało się prostsze niż przypuszczałem:
select t.idklienta
from tabela t
where t.data between to_date ('2020-01-01', 'YYYY-MM-DD') and to_date ('2020-01-31', 'YYYY-MM-DD')
minus
select t.idklienta
from tabela t
where t.data > to_date ('2020-01-31', 'YYYY-MM-DD')

i to tyle. Przykład dla bazy Oracle. Nie testowałem na innych bazach danych.

Pozdrawiam
Darek

Radziwil

unread,
Sep 3, 2020, 10:00:55 AM9/3/20
to
Hej Tomek
Sprawdziłem Twoją propozycję na bazie produkcyjnej i uzyskałem niemal identyczny wynik jak w moim (poniższym) przykładzie. Wstępnie wygląda to tak, jakby został pominięty jeden klient, klient ze skrajnej daty, czyli w Twoim przykładzie z 2020-08-25. Jak sprawdziłem składnię left join z argumentem where is null, to teoretycznie powinienem uzyskać ten sam wynik, co jest przyczyną różnicy, tego nie wiem.
Mimo wszystko wielkie dzięki za podpowiedź.

Pozdrawiam
Darek

Adam M

unread,
Sep 3, 2020, 1:42:19 PM9/3/20
to
Dla PstgreSQL

select t.idklienta
from tabela t
where t.data between to_date ('2020-01-01', 'YYYY-MM-DD') and to_date ('2020-01-31', 'YYYY-MM-DD')
except
0 new messages