key(사람)별로 날짜 구간값을 구하려고 합니다.
레코드 ROW 기준으로 위아래 차를 구하는데 쉽지 않네요.
미리 감사합니다. ^^
인풋테이블
사람 날짜
A 201606 -- 아래와 3월차
A 201603 -- 아래와 9월차
A 201506
B 201601 -- 아래와 1개월차
B 201512
원하는 결과
사람 평균_날짜구간차
A AVG(3+9)
B AVG(1)
위아래 개월차를 구하려면 - LAG/LEAD 등의 분석함수를 이용하면 구할 수 있습니다만... 최종 목적이 위아래 개월차의 평균이라면? - 굳이 위아래 개월차를 구할 필요는 없습니다. - MIN/MAX 개월차를 구해 (건수-1)로 나누어 주면 됩니다.
WITH t AS ( SELECT 'A' id, '201606' ym FROM dual UNION ALL SELECT 'A', '201603' FROM dual UNION ALL SELECT 'A', '201506' FROM dual UNION ALL SELECT 'B', '201601' FROM dual UNION ALL SELECT 'B', '201512' FROM dual ) SELECT id , MONTHS_BETWEEN( TO_DATE(MAX(ym), 'yyyymm') , TO_DATE(MIN(ym), 'yyyymm') ) / (COUNT(*)-1) AS avg_mm FROM t GROUP BY id ORDER BY id ;