그런데 특정조건이 걸리게 되면... 다음과 같이 특정값을 직접 지정해 주어야 할 수 밖에 없습니다.
SELECT A.aaa
,A.bbb
,(SELECT ccc FROM B WHERE base_date = (SELECT MAX(base_date)
FROM B
WHERE ddd='특정값')) AS ccc
FROM TABLE_A A
,A.bbb
,(SELECT ccc FROM B WHERE base_date = (SELECT MAX(base_date)
FROM B
WHERE ddd='특정값')) AS ccc
FROM TABLE_A A
그리하여 다음과 같은 쿼리를 생각하게 되고..
SELECT A.aaa
,A.bbb
,(SELECT ccc FROM B WHERE base_date = (SELECT MAX(base_date)
FROM B
WHERE ddd=A.ddd)) AS ccc
FROM TABLE_A A
,A.bbb
,(SELECT ccc FROM B WHERE base_date = (SELECT MAX(base_date)
FROM B
WHERE ddd=A.ddd)) AS ccc
FROM TABLE_A A
결과는 당연히.. 서브의 서브에서는 참조할 수 없어서 에러가 납니다.(아흑 T-T)
하지만 오라클은 이러한 고민을 해결해주는 KEEP(DENSE_RANK FIRST ORDER BY ~) 함수가 있습니다!! (^0^)b
SELECT A.aaa
,A.bbb
,(SELECT MAX(ccc) KEEP(DENSE_RANK FIRST ORDER BY base_date DESC)
FROM B
WHERE ddd=A.ddd) AS ccc
FROM TABLE_A A
,A.bbb
,(SELECT MAX(ccc) KEEP(DENSE_RANK FIRST ORDER BY base_date DESC)
FROM B
WHERE ddd=A.ddd) AS ccc
FROM TABLE_A A
0 개의 댓글:
댓글 쓰기