2017-09-27 1 views
0

나는 다음과 같은 열이있는 프로그램이라는 표가 합계 : 난 내가 잘HIVE는 : 찾기 실행은

를 작동하고 아래의 쿼리를 가지고있는 각각의 날짜와 에피소드에 대한 총 노출을 찾으려

 
ProgDate(Date) 
Episode(String) 
Impression_id(int) 
ProgName(String) 

Select progdate, episode, count(distinct impression_id) Impression from Program where progname='BBC' group by progdate, episode order by progdate, episode; 
 
Result: 
ProgDate  Episode  Impression  
20160919  1  5   
20160920  1  15   
20160921  1  10   
20160922  1  5   
20160923  2  25   
20160924  2  10   
20160925  2  25   

는하지만 각 에피소드의 총 누적을 찾고 싶어요. 누적 합계를 찾는 방법에 대한 검색을 시도했지만 이전 합계를 모두 합산합니다. 나는 아래와 같이 각 에피소드 전체를 실행하려는 : 하이브 HQL 지원

 
Date  Episode  Impression CumulativeImpressionsPerChannel  
20160919  1  5    5 
20160920  1  15    20 
20160921  1  10    30 
20160922  1  5    35 
20160923  2  25    25 
20160924  2  10    35 
20160925  2  25    60 

답변

0

최신 버전을 윈도우 SUM (를 포함하여 분석 기능 (ref 1) (ref 2을))()

OVER 가정 당신은 버전이 나는 SQL Fiddle

CREATE TABLE d 
    (ProgDate int, Episode int, Impression int) 
; 

INSERT INTO d 
    (ProgDate, Episode, Impression) 
VALUES 
    (20160919, 1, 5), 
    (20160920, 1, 15), 
    (20160921, 1, 10), 
    (20160922, 1, 5), 
    (20160923, 2, 25), 
    (20160924, 2, 10), 
    (20160925, 2, 25) 
; 

검색어 1에서의 PostgreSQL을 사용하여 구문을 모방 한 :

select 
     ProgDate, Episode, Impression 
    , sum(Impression) over(partition by Episode order by ProgDate) CumImpsPerChannel 
    , sum(Impression) over(order by ProgDate) CumOverall 
from (
     Select progdate, episode, count(distinct impression_id) Impression 
     from Program 
     where progname='BBC' 
     group by progdate, episode order by progdate, episode 
    ) d 

Results :

| progdate | episode | impression | cumimpsperchannel | 
|----------|---------|------------|-------------------| 
| 20160919 |  1 |   5 |     5 | 
| 20160920 |  1 |   15 |    20 | 
| 20160921 |  1 |   10 |    30 | 
| 20160922 |  1 |   5 |    35 | 
| 20160923 |  2 |   25 |    25 | 
| 20160924 |  2 |   10 |    35 | 
| 20160925 |  2 |   25 |    60 | 
+0

감사합니다! 당신의 대답이 제 문제에 완벽하게 응답합니다. 한 번 더 질문, 날짜와 에피소드에 관계없이 전체 누적 누적 합계를 얻는 방법은 다음과 같습니다. – Huzefa

+0

'| progdate | 에피소드 | 인상 | cumimpsperchannel | | ---------- | --------- | ------------ | -------------- ----- | | 20160919 | 1 | 5 | 5 | | 20160920 | 1 | 15 | 20 | | 20160921 | 1 | 10 | 30 | | 20160922 | 1 | 5 | 35 | | 20160923 | 2 | 25 | 60 | | 20160924 | 2 | 10 | 70 | | 20160925 | 2 | 25 | 95 |' – Huzefa

+0

OVER() 절에서'partition by ....'부분을 삭제하고 위 쿼리에 추가했습니다. –