ercnam
6k
2018-04-23 14:24:01
0
349

양쪽 테이블의 사용 월을 비교해서 더 큰 달수로 계산하기


여전히 통계 하고 있습니다...

뭐이리 해달라는게 많은건지..


이번엔 양쪽 테이블의 서비스 사용 일자 (월,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월에 집계되고..

이런식으로 짤려면 쿼리를 어떻게 줘야 할까요.

0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.