쿼리를 작성하다보면 가끔(?) 또는 자주(?) join 이 잘~~ 안될때가 있고 답답함을 하소연 할때를 찾는데...
몇일전 이런경우가 생겨 오라클클럽[go]에 다음 그림을 캡쳐해 올리며 질문을 했다.

Q.다음과 같은 데이터 셋에서 join 을 어떻게 해야되나요?

첨부한 jpg 의 상단 두개를 가지고 join 하여

아래의 결과값을 원하고 있습니다

 

A, B 테이블에서 A 날짜보다 작거나 큰값의 MAX 를 가져오면 될것 같은데

잘안되고 있습니다.

 

도움을좀 주세요 ^^



...

..

.


하루가 지나 그 다음날이 되니 다음과 같은 query 를 받을수 있었다.


WITH t1 AS 

SELECT '20090831' std_date, 'KCD' id FROM dual 
UNION ALL SELECT '20090930', 'KCD' FROM dual 
UNION ALL SELECT '20091031', 'KCD' FROM dual 
UNION ALL SELECT '20091130', 'KCD' FROM dual 
UNION ALL SELECT '20091231', 'KCD' FROM dual 

, t2 AS 

SELECT 'KCD' id, '20090828' std_date, 10 amt FROM dual 
UNION ALL SELECT 'KCD', '20091005', 11 FROM dual 
UNION ALL SELECT 'KCD', '20100826', 12 FROM dual 
UNION ALL SELECT 'KCD', '20110101', 13 FROM dual 

SELECT t1.std_date, t1.id 
, MIN(amt) KEEP(DENSE_RANK LAST ORDER BY t2.std_date) amt 
FROM t1, t2 
WHERE t1.id = t2.id 
AND t1.std_date >= t2.std_date 
GROUP BY t1.std_date, t1.id 


bold로 된 함수를 보고선 난 그 아래 "감사의 인사와 함께 함수 공부좀 해야겠네요..." 라고 글을 올렸다.


그리고 조금후.. 다른이에게 아래와 같은 query를 받았다.


WITH test AS 

SELECT '20090831' s_date , 'KCD' id FROM dual UNION ALL 
SELECT '20090930' , 'KCD' FROM dual UNION ALL 
SELECT '20091031' , 'KCD' FROM dual UNION ALL 
SELECT '20091130' , 'KCD' FROM dual UNION ALL 
SELECT '20091231' , 'KCD' FROM dual 

, test2 AS 

SELECT 'KCD' id , '20090828' s_date , 10 amt FROM dual UNION ALL 
SELECT 'KCD' , '20091005' , 11 FROM dual UNION ALL 
SELECT 'KCD' , '20100826' , 12 FROM dual UNION ALL 
SELECT 'KCD' , '20110101' , 13 FROM dual 

SELECT a.s_date , a.id , Max(b.amt) 
FROM test a, test2 b 
WHERE a.id = b.id 
AND a.s_date >= b.s_date 
GROUP BY a.s_date , a.id 


두번째 query의 도움을 받고나선 난 지금 '하악하악' 이라는 표현을 쓰고싶다...

(이외수 소설을 읽진 않았는데 갑자기 떠오름^^;;)


아 이 어찌된말인가...!!



기분은 뭐하더라도... 새로운 함수를 통한 응용을 배웠으니.. 잘 배워둬야겠다..


킁;;

집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!! 집합적 사고가 필요해!!




'Computer Science > DB' 카테고리의 다른 글

C++ <vector>, Database 만들기 #2 저장(fwrite)  (0) 2012.07.10
C++ <vector>, Database 만들기  (0) 2012.05.12
ORACLE - SYSDATE 로 시간구하기  (6) 2009.05.20
ORACLE - 문자열 추출 (substr)  (0) 2009.03.03
ORACLE DUMP()  (0) 2008.10.24
페이스북 댓글
티스토리 댓글

+ Recent posts