2012-10-25 6 views
3

ID, 날짜, 값 (온도) 및 기타 항목이 포함 된 테이블이 있습니다. 내 표는 다음과 같습니다.postgresql의 N 일마다 그룹화하기

+-----+--------------+------------+ 
| ID | temperature | Date | 
+-----+--------------+------------+ 
| 1 | 26.3  | 2012-02-05 | 
| 2 | 27.8  | 2012-02-06 | 
| 3 | 24.6  | 2012-02-07 | 
| 4 | 29.6  | 2012-02-08 | 
+-----+--------------+------------+ 

10 일마다 합계 및 평균과 같은 집계 쿼리를 수행하려고합니다.

psql에서 가능한지 궁금한가요? 그것은 반드시 지난 10 일 동일하지 않습니다 지난 10 행에 걸쳐 이동 합계를 할 것 같은

+0

을 의미합니까 "10 일마다?" 움직이는 창문 갖고 싶니? 1-10, 2-11, 3-12 등? 아니면 1-10, 11-20, 21-31 정도로 좋을까요? – Marvo

+0

나는 움직이는 창을 의미한다. 그러나 psql에서 실제로 가능하지 않다면 두 번째 옵션을 사용해야합니다. 고맙습니다. –

답변

7

SQL Fiddle

select 
    "date", 
    temperature, 
    avg(temperature) over(order by "date" rows 10 preceding) mean 
from t 
order by "date" 
+0

감사합니다. 귀하의 솔루션이 나를 위해 작동합니다. 그러나 10 일 간격으로 계산해야합니다. 첫 10 일, 두 번째 10 일 평균 계산처럼. . . –

+1

@ user1043898 그건 정말 다른 질문이지만 이미 다른 곳에서도 잘 대답하고 있습니다. 'group by extract (the_date로부터의 신기원)/extract (간격 '10'day에서의 신기원)'을 사용하십시오. http://stackoverflow.com/questions/12921598/efficiently-querying-a-huge-time-series-table-for-one-row-every-15-minutes, http://stackoverflow.com/questions/12623358을 참조하십시오./group-by-data-intervals –

+0

감사합니다. Craig –

2
select id, 
     temperature, 
     sum(temperature) over (partition by null order by date rows between 10 preceding and current row) 
from that_table; 

그것은 정확히 당신이 원하는하지 않을 수 있습니다. 당신은 무엇을

+0

이것이 정확히 무슨 뜻인지 고맙습니다. 오류 : 현재 행에서 시작하는 프레임은 앞의 행을 가질 수 없습니다. ^ –

+1

@ user1043898 : 죄송합니다. 제발 제발 편집하십시오. –