2014-05-15 1 views
0

30 일 동안 웹 페이지에서 본 제품의 양과 다른 날짜가 있습니다. SQL에서 지수 붕괴 모델을 만들려고합니다. 오래된 이벤트보다 최신 이벤트를 강조하고 싶기 때문에 기하 급수적 인 감퇴를 사용하고 있습니다. 오류없이 SQL에서 이것을 작성하는 방법을 모르겠습니다. 나는 이런 타입의 모델로 이것을 한 번도 해 본 적이 없기 때문에 나는 그것을 올바르게하고있다.다른 날짜에 대한 SQL의 기하 급수적 인 감소 페이지보기

================================= 데이터는이

product  views date 

    a   1  2014-05-15 
    a   2  2014-05-01 
    b   2  2014-05-10 
    c   4  2014-05-02 
    c   1  2014-05-12 
    d   3  2014-05-11 
과 같은

= ===============================

코드 :에 쓸 것을

create table decay model as 
select product,views,date 
case when...... 
from table abc 
group by product; 

확실하지 모델을 수행하십시오

나는 최근

여러분의 도움에 감사드립니다 조회 한 제품에 대 나이가되었다는 것을

+0

'주문'을 알고 있습니까? –

답변

0

당신은 이런 식으로 작업을 수행 할 수 있습니다 조회 :

  1. 당신이 지수 붕괴를 적용하고자하는 파티션을 선택, 해당 그룹 내에서 날짜순으로 내림차순으로 정렬하십시오.

  2. 함수를 ROW_NUMBER() 함수를 사용하여 오름차순 정렬을 사용하여 각 하위 그룹 내에서 행 번호를 가져옵니다.

  3. pow (your_variable_in_ [0,1], rownum)을 계산하여 결과에 적용하십시오.

    SELECT <your_partitioning>, date, <whatever>*power(<your_variable>,rownum-1) 
    FROM (SELECT a.* 
          , ROW_NUMBER() OVER (PARTITION BY <your_partitioning> ORDER BY a.date DESC) AS rownum 
         FROM YOUR_TABLE a) 
    ORDER BY <your_partitioning>, date DESC 
    

    편집 : 내가 문제를 통해 다시 읽고 당신이 무엇을 요구 내가 지금 이해 생각

코드 (오라클 SQL 또는 DB2에서 작동 할 수 있습니다) 다음과 같을 수 왜냐하면 여기에 작용할 수있는 해결책이 있습니다 (부패 계수는 0.9입니다) :

SELECT product, sum(adjusted_views) // (i) 
FROM (SELECT product, views*power(0.9, rownum-1) AS adjusted_views, date, rownum // (ii) 
     FROM (SELECT product, views, date // (iii) 
       , ROW_NUMBER() OVER (PARTITION BY product ORDER BY a.date DESC) AS rownum 
      FROM YOUR_TABLE a) 
     ORDER BY product, date DESC) 
GROUP BY product 

내부 SELECT 문 (III)이이

product  views  date   rownum 
-------------------------------------------------- 
    a   1  2014-05-15   1 
    a   2  2014-05-14   2 
    a   2  2014-05-13   3 
    b   2  2014-05-10   1 
    b   3  2014-05-09   2 
    b   2  2014-05-08   3 
    b   1  2014-05-07   4 

다음 쿼리처럼 보일 수 있습니다 임시 테이블을 생성한다 (II) 후, 지수 함수 적으로 감쇠 요인을 구성하는 ROWNUMBER를 사용하여 0.9^(ROWNUM-1)과 적용 보기로. 이 관심있는 수량 것으로 보인다 결과는 조정 된 뷰를 표현하는 마지막 단계 (외부 쿼리)에서

product  adjusted_views  date   rownum 
-------------------------------------------------- 
    a   1 * 0.9^0  2014-05-15   1 
    a   2 * 0.9^1  2014-05-14   2 
    a   2 * 0.9^2  2014-05-13   3 
    b   2 * 0.9^0  2014-05-10   1 
    b   3 * 0.9^1  2014-05-09   2 
    b   2 * 0.9^2  2014-05-08   3 
    b   1 * 0.9^3  2014-05-07   4 

이다. 그러나

주, 그 순서에 일정한 거리가 있어야합니다. 예를 들어, 항상 하루 (여기서는 하루가 아니라 한 달이 아닌데도 비슷한 방식으로 가중치가 적용되기 때문에)입니다.

+0

나는 어떤 라인이든 혼란 스럽다. 그게 의미/참조하는 것은 무엇입니까? – user3120266

+0

지수 기하 급수적 인 요소를 적용하려는 것은 무엇이든 의미합니다. 당신의 경우 그것은 전망일지도 모른다. 나는 당신의 문제를 해결하기 위해 해답을 편집했다. – davidhigh

관련 문제