2017-12-19 1 views
0

아래 쿼리에서 "2017-09-01 00:00:00"과 "2017-11-31 23:59:59"사이에 활성화 된 고객 수가 표시됩니다 "를 cust_90으로 지정하고 다른 열을 추가하여"2017-11-01 00:00:00 "과"2017-11-31 23:59:59 "사이의 활성 고객 수를 찾습니다 (전체 기간).SQL의 기본 쿼리에서 하위 집합 추출

select custid, count(distinct concat(visit1, visit2)) as cust_90 
    from test1 
    where date_time between "2017-09-01 00:00:00" and "2017-11-31 23:59:59" 
    and custid = '234214124' 
    group by custid; 

샘플 출력 :

CustomerName cust_90  cust_30 
    David   38   15 

내가 한 달에 고객이 활성 찾을 수 위의 쿼리에서 하위 쿼리를 가질 수 있는지 궁금. 어떤 제안이라도 좋을 것입니다.

+1

'2017-11-31 23 : 59 : 59'는 잘못된 datetime 값입니다. –

+0

@ digital.aaron : datetime이 우리 시스템에 기록되는 방법입니다. – user3447653

+0

11 월 31 일? 달력을 참조하고 싶을 수도 있습니다 ... –

답변

2

case 표현식을 사용하여 수행 할 수있는 조건부 집계라고합니다.

select custid, 
count(distinct concat(visit1, visit2) end) as cust_90, 
count(distinct case when to_date(date_time)>='2017-11-01' then concat(visit1, visit2) end) as cust_30 
from test1 
where date_time >= '2017-09-01' and date_time < '2017-12-01' 
and custid = '234214124' 
group by custid; 
+0

독점 종료점을 사용하고 있으므로 * TODATE()가 필요하지 않습니다. – MatBailie

관련 문제