여전히 통계 하고 있습니다...
뭐이리 해달라는게 많은건지..
이번엔 양쪽 테이블의 서비스 사용 일자 (월,month) 를 기준으로
가장 큰 (=가장 늦게 쓴) 달수에 1개 를 더해 집계하는 것입니다..
서비스1과 서비스2 모두를 사용한 고객이 월별로 몇명이 있는가가 최종 요구인데요.
(서비스1과 2 구분없이 최종적으로 모두 사용하게 되는 시점의 달로 기준)
그래서 일단 서비스1 테이블과 서비스2 테이블을 고객ID 기준으로 INNER JOIN 했습니다.
이때 집계 기준이 되는 월 컬럼은 일단 서비스2 기준으로 해버렸는데..
당연히 이러면 안된다는 것 때문에 이 질문글을 쓰게 되었습니다...
4번 줄에 B002 고객은 서비스1을 더 늦게 사용했기 때문에 당장 다음달만 되어도 제가 짠 쿼리는 틀리게 되는거죠....
(아직은 서비스2 가 이번달부터 사용 시작된지라 일단은 맞음)
SELECT sum(case when S2.year = '2018' then 1 else 0 end) total,
sum(case when S2.month = '2' then 1 else 0 end) month02,
sum(case when S2.month = '3' then 1 else 0 end) month03,
sum(case when S2.month = '4' then 1 else 0 end) month04,
sum(case when S2.month = '5' then 1 else 0 end) month05,
sum(case when S2.month = '6' then 1 else 0 end) month06,
sum(case when S2.month = '7' then 1 else 0 end) month07,
sum(case when S2.month = '8' then 1 else 0 end) month08,
sum(case when S2.month = '9' then 1 else 0 end) month09,
sum(case when S2.month = '10' then 1 else 0 end) month10,
sum(case when S2.month = '11' then 1 else 0 end) month11,
sum(case when S2.month = '12' then 1 else 0 end) month12
FROM SERVICE1 AS S1 Inner Join SERVICE2 AS S2
ON S1.custid = S2.custid
WHERE S2.servicestate != '3' AND S1.custid = S2.custid
일단 SQL 문은 이렇습니다. 저 SUM(case when~)문 은 정말이지 여기서 알고 나선 꿀같은 쿼리 같네요..
아무튼...보시다시피 서비스2 테이블의 month 컬럼을 기준으로 합계 계산하기 때문에
서비스1의 month 가 더 큰 고객의 경우 제대로 집계되지 않는다는 문제가 발생합니다.
4월달에 마지막으로 둘다 사용된 고객은 4월에 집계되고
5월달에 마지막으로 둘다 사용된 고객은 5월에 집계되고..
이런식으로 짤려면 쿼리를 어떻게 줘야 할까요.