Jak wybrać licznik, w którym czas pomiędzy listą daty wahał?

głosy
0

Istnieje tabela o nazwie „record”.

userid | date
------ | ------
1      | 2017-08-21  
1      | 2017-08-22  
2      | 2017-08-22  
1      | 2017-08-23  
3      | 2017-08-23 

Teraz trzeba się liczyć trzy SQL identyfikatora.

select count(DISTINCT userid) from record where date between 2017-08-21  and 2017-08-23;

Wynik: 3

select count(DISTINCT userid) from record where date between 2017-08-22  and 2017-08-23;

Wynik: 3

select count(DISTINCT userid) from record where date between 2017-08-23  and 2017-08-23;

Wynik: 2

Chcę policzyć tych, o jednym czasie, mógłby ktoś mi pomóc z tym proszę?

Utwórz 31/08/2017 o 02:01
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

SELECT distinct date_field,
       (select count(distinct userid) from record r1 where r1.date_field between r2.date_field and '2017-08-23')
  FROM record r2

Czy to bardziej wydajne wersja sugeruje Shelden

SELECT date_field,
       (select count(distinct userid) from record r1 where r1.date_field between r2.date_field and '2017-08-23')
  FROM (select distinct date_field from record) r2
Odpowiedział 31/08/2017 o 02:34
źródło użytkownik

głosy
0

Użyj agregację warunkowego:

select count(distinct case when between '2017-08-21' and '2017-08-23' then userid end),
       count(distinct case when between '2017-08-22' and '2017-08-23' then userid end),
       count(distinct case when between '2017-08-24' and '2017-08-23' then userid end)
from record r;
Odpowiedział 31/08/2017 o 05:12
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more