Thread View: pl.comp.bazy-danych
5 messages
5 total messages
Started by Radziwil
Thu, 03 Sep 2020 12:22
Niepowracający klienci
Author: Radziwil
Date: Thu, 03 Sep 2020 12:22
Date: Thu, 03 Sep 2020 12:22
8 lines
1347 bytes
1347 bytes
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
Re: Niepowracający klienci
Author: Tomek
Date: Thu, 03 Sep 2020 13:20
Date: Thu, 03 Sep 2020 13:20
21 lines
1497 bytes
1497 bytes
W dniu 03.09.2020 o 14:22, Radziwil pisze: > 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 > 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
Re: Niepowracający klienci
Author: Radziwil
Date: Thu, 03 Sep 2020 13:34
Date: Thu, 03 Sep 2020 13:34
24 lines
1975 bytes
1975 bytes
czwartek, 3 września 2020 o 14:22:43 UTC+2 Radziwil napisał(a):
> 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
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
Re: Niepowracający klienci
Author: Radziwil
Date: Thu, 03 Sep 2020 14:00
Date: Thu, 03 Sep 2020 14:00
29 lines
2588 bytes
2588 bytes
czwartek, 3 września 2020 o 15:21:29 UTC+2 Tomek napisał(a): > W dniu 03.09.2020 o 14:22, Radziwil pisze: > > 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 > > > 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 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
Re: Niepowracający klienci
Author: Adam M
Date: Thu, 03 Sep 2020 17:42
Date: Thu, 03 Sep 2020 17:42
32 lines
2412 bytes
2412 bytes
On Thursday, September 3, 2020 at 9:34:29 AM UTC-4, Radziwil wrote:
> czwartek, 3 września 2020 o 14:22:43 UTC+2 Radziwil napisał(a):
> > 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
> 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
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
select t.idklienta
from tabela t
where t.data > to_date ('2020-01-31', 'YYYY-MM-DD')
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads