2011-08-25 3 views
2

SQL 쿼리 며칠 동안 데이터를 축적 첫번째 심볼마다베이스 값은 날짜 별 값, 즉의 :나는 두 테이블, 제 (T1) 염기 번호가이

나는 몇 일 동안 첫 번째 열에서 초기 값에 추가 된 값 컬럼의 누적 합계를 얻기 위해 필요 어떤 쿼리
date   symbol value 
---------- ------ ----- 
2011-09-01 ABC  100 
2011-09-02 ABC  10 
2011-09-03 ABC  1 

. 그래서 쿼리의 출력이

symbol date  total 
------ ---------- ------ 
ABC 2011-09-01 1100 
ABC 2011-09-02 1110 
ABC 2011-09-03 1111 

처럼 보일 것이다 그래서 T1의 inital 값을 더한 해당 열의 날짜보다 모든 날짜의 합 자사의 합계입니다.

이의 대상 데이터베이스가 iSeries의

에 DB2 당신은 사용할 필요가
+0

내가 DB2 모르지만, 일반적인 생각은 ** 실행 총 **, SQL 서버 예라고 : http://geekswithblogs.net/Rhames/archive/ 2008/10/28/calculate-running-total-in-sql-server-2005 ----optimal.aspx. –

답변

1

SQL의 접근 방식은

select 
    a.symbol, 
    a.value --current value 
    + COALESCE((select sum(value) 
     from T2 b 
     where 
      b.date < a.date and 
      b.symbol=a.symbol 
     ),0) --sum of history 
    + c.value --initial value 
from 
    t2 a join t1 c on (a.symbol = c.symbol) 
+1

subselect에'COALESCE'가 필요합니다. 그렇지 않으면 실제 첫 번째 합계가 아닌 첫 행에 대해'null '을 반환합니다. –

+0

이것은 작동합니다. X-Zero가 맞으면, subselect에 합집합이 필요합니다. –

+0

@ X-Zero : 네가 맞아, 고마워! –

1

입니다 window functions :

SELECT T1.symbol, T2.date, COALESCE(T1.value, 0)+sum(T2.value) over (PARTITION BY T2.symbol ORDER BY T2.date) 
FROM T2 
    LEFT JOIN T1 ON T1.symbol = T2.symbol 
ORDER BY T1.symbol, T2.date 

편집 작동한다 DB2 9.7 LUW의 문서에 따라 PostgreSQL을에

작품, 또한 DB2에서.

+0

-1 : 이것은 유효한 구문이 아닙니다 (최소한 DB2에서는 어디에서나 기대됩니다). 나는 또한 이것이 원하는 결과를 정확하게 생성 할 것이라고 생각하지 않습니다. –

+0

Whups : 이것은 하드웨어에서 실행중인 버전에 따라 DB2에서 잠재적으로 유효하지 않은 구문입니다. 예를 들어, iSeries OS를 실행하는 AS/400에서는 유효하지 않습니다. (너무 성급한 투표를 제거 할 수 있도록 답변을 편집하십시오) –

+0

PostgreSQL 9.0에서 테스트했습니다. DB2 9.7 LUW 문서에 따르면이 파일도 제대로 작동합니다. – Crack