2014-03-03 2 views
4

아래와 같이 절의 내부에 where 절을 사용할 수 있습니까?postgres의 over 절 안에있는 절

SELECT SUM(amount) OVER(partition by prod_name WHERE dateval > dateval_13week) 

날짜가 순서가 아니기 때문에 앞뒤 다음 내부 인사말을 사용할 수 없습니다. 내가 가져올 필요가있는 것은 현재 레코드의 날짜 값이 13 주 미만인 레코드입니다.

EDIT : 
sum(CASE WHEN dateval >= dateval_13week and dateval <=current_row_dateval then amount else 0 end) over (partition by prod_name order by week_end desc) 

정교하게하기 위해, 이전에 모든 날짜가 시퀀스에있을 때 아래 쿼리로 레코드를 분할했습니다. 지금 나는 무작위 순서에있는 날짜가 있고 몇몇 놓치는 날짜가있다.

sum(amount) over 
     (partition by prod_name order by prod_name,week_end desc rows between 0 preceding and 12 following) 

답변

5

당신은 당신의 SUM 매개 변수에 WHERE을 시뮬레이션 할 수 있습니다 :

SELECT SUM(CASE WHEN dateval > dateval_13week THEN amount ELSE 0 END) 
      OVER(partition by prod_name) 
+1

@D Stanley. 지금 내 EDIT를 확인해 주시겠습니까? 현재 행 날짜와 그 날짜 사이에있는 모든 항목의 합이 13 주 전까지 필요합니다. 단지 13 주 값과 비교할 수 없습니다. 내 현재 행 날짜 값은 항목을 가져 오는 참조입니다. – user2569524

0

당신은 OVER 파티션 절 내부 WHERE 절에 행을 필터링 할 수 없습니다. CASE을 사용하고 조건이 충족되는 양의 합계를 수행하여 필요한 행만 선택하여 쿼리를 수정할 수 있습니다.

+0

제 편집을 확인해 주 시겠어요. 감사합니다! – user2569524