2016-09-15 3 views
1

의 내가 같은 시간 시트의 테이블이 있다고 가정 해 봅시다 :PostgreSQL에서 타임 스탬프를 초과하는 부동 평균을 어떻게 얻을 수 있습니까?

CREATE TABLE foo (
    spent_on DATETIME, 
    hours FLOAT 
) 

spent_on 가정하면 값이 기록 된 타임 스탬프이며, hours는 작업에 소요되는 시간의 양을 나타내는 부동 소수점 값입니다.

지난 7 일 동안 수 개월 간의 변동 평균은 어떻게 계산합니까?

나는 다음과 같은 해낸 적이 있지만 그것은 작동하지 않습니다 : 나는 윈도우 함수에 대한 문서를 이해하기 위해 노력했습니다

ERROR: syntax error at or near "ROW" 
LINE 1: ... BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from d... 

: 나는 다음과 같은 오류가

select spent_on, hours, avg(hours) 
over RANGE BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from daily; 

을 ,하지만 난 파티션, 창문과 프레임 사이의 아이디어를 쥐고 진짜 문제가 있습니다. 결과적으로 쿼리를 작성할 수 없습니다.

+1

불행하게도 포스트 그레스는 현재하지 않습니다 간격에 따라 지원 범위. –

답변

2

은 내가 RANGE 구문에 대한 확실하지 않다, 그래서 나 하위 쿼리와 솔루션을 제공 할 수 있도록 (성능이 작은 테이블 ETC에 문제가없는 경우 ..) :

SELECT t.spent_on,t.hours, 
     COALESCE((SELECT AVG(s.hours) FROM foo 
     WHERE t.spent_on > CURRENT_TIMESTAMP - INTERVAL '7 days'),0) float_avg 
FROM foo t 
+0

나는 이것을 시험해 보았다. 일종의 작품이지만 NULL 값에 문제가 있습니다 (일부 행에는 NULL이 포함되어 있음). 어떻게 내가 이것을 합쳐서 합치는지를 확신 할 수 없다. – exhuma

+1

@exhuma를 시험해 본다 – sagi

+0

오, 나는 지금 바보 같은 느낌이 든다 ...^_^고마워! – exhuma

관련 문제