레코드가 복수인 경우 맥스값만 추출하고 싶습니다. 0 6 1,354

by 박동혁 [2007.11.21 17:43:15]


안녕하세요.

SQL질문 드립니다.

 

두개의 테이블을 조인해서 값을 추출하려고 합니다.

 

select A.계약번호, A.고객번호, B.기입일, B.계산일

from   계약마스타 A, 입급 B

where A.계약번호 = B.계약번호

and    A.고객번호 = B.고객번호;

 

위의 SQL에서 값이 중복되는 경우에는

'입급 B'테이블(키값: 계약번호, 고객번호, 입금연월일, 통번)에서

입급연월일과 통번에 대해서 가장 큰값만 추출하고 싶습니다.

 

현재 입급테이블의 데이타를 예를 들면....

------------------------------------------------

계약번호    고객번호     입금연월일     통번

------------------------------------------------

0001          0001            20070131        0

0001          0001            20070131        1

0001          0001            20071120        0

0001          0001            20071120        1

0001          0001            20071120        2

0002          0002            20070331        0

0002          0002            20070331        1

0003          0003            20070707        0

0003          0003            20070707        1

0003          0003            20070707        2

0003          0003            20071007        0

0003          0003            20071007        1

------------------------------------------------

 

인 경우....SQL을 실행하면 아래의 데이터만 추출 되었으면 합니다.

------------------------------------------------

계약번호    고객번호     입금연월일     통번

------------------------------------------------

0001          0001            20070131        1

0001          0001            20071120        2

0002          0002            20070331        1

0003          0003            20070707        2

0003          0003            20071007        1

------------------------------------------------

 

고수님들~

위의 SQL조언 부탁 드립니다.

 

그럼, 즐거운 저녁시간 되세요. 감사합니다.

by 채용근 [2007.11.21 00:00:00]
SELECT 계약번호, 고객번호, 입금년월일, MAX(통번) FROM (
SELECT '0001' 계약번호, '0001' 고객번호, '20070131' 입금년월일, '0' 통번 FROM DUAL UNION ALL
SELECT '0001', '0001', '20070131', '1' FROM DUAL UNION ALL
SELECT '0001', '0001', '20071120', '0' FROM DUAL UNION ALL
SELECT '0001', '0001', '20071120', '1' FROM DUAL UNION ALL
SELECT '0001', '0001', '20071120', '2' FROM DUAL UNION ALL
SELECT '0002', '0002', '20070331', '0' FROM DUAL UNION ALL
SELECT '0002', '0002', '20070331', '1' FROM DUAL UNION ALL
SELECT '0003', '0003', '20070707', '0' FROM DUAL UNION ALL
SELECT '0003', '0003', '20070707', '1' FROM DUAL UNION ALL
SELECT '0003', '0003', '20070707', '2' FROM DUAL UNION ALL
SELECT '0003', '0003', '20071007', '0' FROM DUAL UNION ALL
SELECT '0003', '0003', '20071007', '1' FROM DUAL
) GROUP BY 계약번호, 고객번호, 입금년월일

by 박동혁 [2007.11.21 00:00:00]
채용근님 감사합니다.
덕분에 해결 되었습니다.
좋은 저녁시간 되세요~

by 디스타임 [2007.11.21 00:00:00]
맞는지 모르겠습니다만 한번 올려 봅니다.
틀리면 말씀좀 해주세요.^^

by 디스타임 [2007.11.21 00:00:00]
select a.계약번호,a.고객번호,b.기입일,b.계산일
from 계약마스터 a,(select 계약번호,고객번호,입금연월일,max(통번)
from 입금 group by 입금연월일) b
where A.계약번호 = B.계약번호
and A.고객번호 = B.고객번호;

by 박동혁 [2007.11.22 00:00:00]
디스타임님~
감사합니다.
그런데, 그렇게 하는게 맞는거 같은데...
그렇게 하니...자꾸 그룹바이에러라고 나옵니다.
조금 더 해보고 그래도 안되면...다시 질문 드리겠습니다.
감사합니다~

by 아기고옴 [2007.11.22 00:00:00]
select a.계약번호,a.고객번호,b.기입일,b.계산일
from 계약마스터 a,(select 계약번호,고객번호,입금연월일,max(통번)
from 입금 group by 계약번호,고객번호,입금연월일 ) b
where A.계약번호 = B.계약번호
and A.고객번호 = B.고객번호;
가 아닐까요?.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입