2012-10-25 7 views
1

일련의 행이 있으며이 행의 값을 N 개의 요소 그룹에 집계하여 현재 및 N-1 행의 값을 누적해야합니다.행 수별 집계 값

VALUES (1),(2),(3),(4),(5); 

I 행의 다음 세트를 수신 할 (배열) :

{1,2,3} 
{2,3,4} 
{3,4,5} 
{4,5} 
{5} 

그것은 N 변수인지, 중요하다, 그래서 할 수 없습니다 N=3 및 데이터의 존재와

조인을 사용하십시오.

답변

1

글쎄, 이것은 using frames together with window functions 일 수 있습니다.

주제의 질문은 다음과 같이 해결할 수 있습니다

WITH v(v) AS (VALUES (1),(2),(3),(4),(5)) 
SELECT v, 
     array_agg(v) OVER (ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) AS arr 
    FROM v; 

그리고 다음의 예는 즉 모든 N 항목이 포함되지 않은 것들 제거, 전체 배열의 목록을 얻을하는 방법을 보여

WITH cnt(c) AS (SELECT 3), 
    val(v) AS (VALUES (1),(2),(3),(4),(5)), 
    arr AS 
(SELECT v, 
     array_agg(v) OVER (ROWS BETWEEN CURRENT ROW 
          AND (SELECT c-1 FROM cnt) FOLLOWING) AS arr 
    FROM val) 
SELECT v,arr 
    FROM arr 
WHERE array_upper(arr,1) = (SELECT c FROM cnt); 

나는 창 기능을 정말 좋아합니다!