🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych
5 messages
5 total messages Started by Radziwil Thu, 03 Sep 2020 12:22
Niepowracający klienci
#195717
Author: Radziwil
Date: Thu, 03 Sep 2020 12:22
8 lines
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
#195720
Author: Tomek
Date: Thu, 03 Sep 2020 13:20
21 lines
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
#195718
Author: Radziwil
Date: Thu, 03 Sep 2020 13:34
24 lines
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
#195721
Author: Radziwil
Date: Thu, 03 Sep 2020 14:00
29 lines
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
#195719
Author: Adam M
Date: Thu, 03 Sep 2020 17:42
32 lines
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