2016-10-27 4 views
1

변수 계산에 문제가 있습니다. ID, 날짜 및 월급이있는 테이블이 있다고 상상해보십시오. 그리고 지금 나의 임무는 각 날짜에 대해 지난 6 개월 동안 평균 급여를 알아 보는 것입니다. Cartesian 제품 대신이 값을 얻는 다른 가능성이 있습니까?지난 6 개월 동안 평균치를 얻는 방법

내 제안 해상도 :

select ID, Date, AVG(Salary2) 
from 
(
select tab1.ID as ID, tab1.Date as Date, tab2.Date as Date2, tab2.Salary as Salary2 
from table tab1 
**JOIN** 
(select ID, Date, Salary from table) tab2 
on tab1.ID = tab2.ID 
and tab1.Date >= tab2.Date 
and add_months(tab2.Date, 5) >= tab1.Date 
) group by ID, Date; 

나는이 방법이 효과가없는 것으로 가정합니다. 나는 큰 테이블의 관점에서 너무 많은 시간을 소비한다고 생각합니다.

다른 방법이 있습니까? 또는이 스크립트를 어떻게 최적화해야합니까?

당신이 무엇을 요구 분명하지 않다 당신에게

+0

당신이 할 수주십시오 샘플 데이터를 제공 하시겠습니까? – Conqueror

+0

및 예상 결과? –

답변

0

감사하지만 난 당신이 찾고있는 가정

select ID, Date, 
    AVG(Salary2) OVER (
    PARTITION BY ID 
    ORDER BY DATE 
    RANGE BETWEEN INTERVAL '6' MONTH PRECEDING AND CURRENT ROW) 
from table tab1; 

또는 바로 가기 :

select ID, Date, 
    AVG(Salary2) OVER (
    PARTITION BY ID 
    ORDER BY DATE 
    RANGE INTERVAL '6' MONTH PRECEDING) 
from table tab1; 
+0

이것은 내가 찾고 있었던 것이다! 고마워요! –

+0

이 경우 대답에 동의 함을 표시하십시오. –

관련 문제