2016-09-30 4 views
0

내가 고객이 구입 한 항목을 추적 계속 내 테이블에서 다음 필드가 있습니다필터 행

customer_id, item_id, week_id 

과 나는이 테이블을 필터링 할 것 최소 5 주 연속 주중에 최소한 1 개의 제품을 구매 한 고객 만 유지하는 것.

현재 나의 생각은 customer_id 및 week_id 필드에서 DISTINCT를 사용하고 customer_id에서 GROUP BY를 수행하는 것입니다. 그러나 어떤 집계 함수를 사용해야하는지, 또는 UDF 함수를 사용해야하는 경우 (내 집계 함수는 week_id를 집합으로 그룹화 한 다음 내 UDF를이 집합에 적용해야 함) 모릅니다.

또 다른 방법은 week_id_1, week_id_2, week_id_3, week_id_4 열을 작성하여 week_id 열을 기준으로 증가 된 값으로 채운 다음 테이블에 LEFT JOIN을 5 회 수행하는 것입니다 (week_id , week_id_1, week_id_2 등). 그러나 이것은 꽤 비싸지 만 더 좋은 방법이 없는지 궁금합니다.

SQL에 익숙하지 않아 도움이된다면 크게 감사하겠습니다.

답변

1

연속 5 주를 원하는 경우 week_id을 매주 1 씩 증가한다고 가정하고 join을 사용하십시오. 여기에 한 가지 방법입니다 :

select distinct customer_id 
from t t1 join 
    t t2 
    on t2.customer_id = t1.customer_id and 
     t2.week_id = t1.week_id + 1 join 
    t t3 
    on t3.customer_id = t1.customer_id and 
     t3.week_id = t1.week_id + 2 join 
    t t4 
    on t4.customer_id = t1.customer_id and 
     t4.week_id = t1.week_id + 3 join 
    t t5 
    on t5.customer_id = t1.customer_id and 
     t5.week_id = t1.week_id + 4; 
+0

좋아, 이것은 당신이 열 week_id_1, week_id_2, week_id_3, week_id_4을 만들 수 있지만, 그렇게 할 조인을 사용하지 않는 청소기 내 두 번째 방법은, 조금 이상 같은 접근 방식입니다. 그러나 이것은 내가 4 개의 조인이 필요하다는 것을 의미합니다. 잘못 입력하지 않으면 상당히 많은 작업입니다. 이러한 종류의 문제를 해결하는 표준 방법 (즉, 여러 행 간의 종속성을 분석하기 위해 자체적으로 테이블에 조인)입니까, 아니면 그렇게 많은 조인을하지 않고도 더 효율적인 방법이 있습니까? –

+0

왜냐하면 나는 5 주 후 20 주를 원하지 않기 때문에. 이는 19 개의 조인을 의미하며 이는 값이 비쌀 것입니다. –

+0

@KestemontMax. . . 20 주는 5 주와는 다른 질문입니다. –