안녕하세요 혼자 고민하다가 질문 드립니다.
다음과 같이 상점을 방문한 고객 데이타 매출일자별로 들어 있습니다
고객코드 상점코드 매출일자 ..................
11111 0110 20120111 ..................
22222 0120 20120211 ..................
33333 0110 20120221 ..................
44444 0150 20120221 ..................
11111 0110 20120311 ..................
44444 0150 20120321 ..................
22222 0130 20120401 ..................
11111 0110 20120521 ..................
22222 0120 20120507 ..................
33333 0110 20120621 ..................
44444 0150 20120631 ..................
11111 0110 20120701 ..................
44444 0150 20120711 ..................
22222 0130 20120811 ..................
이중에서 정해진 기간동안에 한 매장을 방문했던 고객들을 뽑아오고 싶은데요.
위에 보면은 고객코드 11111 과 44444 가진 고객을 단골고객이라고 볼수 있겠습니다.
제가 작성한 쿼리는 다음과 같습니다.
SELECT A.고객코드 , MAX(상점코드)
(
SELECT 고객코드 , 상점코드
FROM 테이블
WHERE 매출일자 >=기준시작일
AND 매출일자 <=기준종료일
GROUP BY 고객코드 , 상점코드
) A
GROUP BY A.고객코드
HAVING COUNT(*) = 1
이런식으로 구현을 했는데요 과연 제대로 했는지 의심 스럽고 또 데이타가 1억건이 넘어가니 쿼리 한번 돌리는것도
넘 오래 걸리네요.
고수님들 쿼리좀 한번 검토 부탁 드리겠습니다.
질문 작성하다보니 인덱스에 관한 질문도 생기네요
인덱스는 고객코드에는 걸려 있고 상점 코드에는 걸려 있지 않습니다. 상점코드에도 인덱스를 구성 하는게 더 낳을까요?
역시 가르침 기다리겠습니다...
|