안녕하세여
질문 할 내용은
MYSQL입니다
테이블이
1. 회원사테이블(Partner)
2. 전문가 테이블(Expert)
3. AidExpert(회원사에 등록된 전문가목록테이블)
4. ARS(전문가가 등록한 음성등록 페이지 테이블)
회원사 테이블 컬럼 목록
===Partner===
1. siteid (고유번호) 001,002,003 순차적으로 등록됨
2. companyname(회원사이름)
3. DelFlag 삭제유무
== Expert==
1. Expert(전문가 번호) 수동등록
2. Name 전문가 이름
3. ExpertId 전문가 아이디
4. FILENAME1 파일이름 1
5. FILENAME2 파일이름 2
6. DelFlag 삭제유무
== AidExpert==
1. idAidExpert 고유번호(자동증가값)
2. ExpertNo(전문가 번호 Expert 테이블의 ExpertNo 참조)
3. siteid(회원사 고유번호 Partner 테이블의 siteId참조)
4. DelFlag 삭제유무
== ARS==
1. IDARS 고유번호(자동증가값)
2. RecFileName 제목
3. Charge 내용
4. regdate 등록일자
5. ExpertNo(전문가 번호 Expert 테이블의 ExpertNo 참조)
6. DelFlag 삭제유무
이런식으로 구성되어있습니다.
요구하는 쿼리는
이거는 현재 전문가가 등록한 ARS에 내용을 최신거만 1개 뽑으라고 하는 겁니다.
제가 쿼리를 만들었는데..
SELECT A.SiteId,A.CompanyName,B.ExpertNo,B.ExpertId,B.NAME,B.FILENAME1,B.FILENAME2,C.IDARS,C.RecFileName,C.Charge
FROM AideExport D
Inner Join Partner A On A.SiteId = D.Partner_SiteId AND A.DelFlag = 'N'
Inner Join Expert B On B.ExpertNo = D.Expert_ExpertNo AND B.DelFlag = 'N'
Inner Join Ars C On C.Expert_ExpertNo = B.ExpertNo AND C.DelFlag = 'N'
WHERE D.DelFlag = 'N'
ORDER BY C.IDARS DESC
데이타는
SiteId |
CompanyName |
ExpertNo |
ExpertId |
NAME |
FILENAME1 |
FILENAME2 |
IDARS |
RecFileName |
Charge |
0003 |
nanjang |
789 |
tv |
tv |
name_070.wav |
name_070.wav |
3 |
78920100404.wav |
|
0001 |
Ricoms |
080 |
narae |
성기배 |
name_010.wav |
name_010.wav |
2 |
08020100404.wav |
(NULL) |
0001 |
Ricoms |
070 |
wontae |
wontae |
name_050.wav |
name_050.wav |
1 |
07020100403.wav |
|
이렇게 나옵니다.
이 쿼리 의 문제는
만약 789란 번호를 가진 전문가가 이상태에서 ARS를 하나 더 등록하면
2개가 등록됩니다.
SiteId |
CompanyName |
ExpertNo |
ExpertId |
NAME |
FILENAME1 |
FILENAME2 |
IDARS |
RecFileName |
Charge |
0003 |
nanjang |
789 |
tv |
tv |
name_070.wav |
name_070.wav |
8 |
78920103334.wav |
|
0003 |
nanjang |
789 |
tv |
tv |
name_070.wav |
name_070.wav |
3 |
78920100404.wav |
|
0001 |
Ricoms |
080 |
narae |
성기배 |
name_010.wav |
name_010.wav |
2 |
08020100404.wav |
(NULL) |
0001 |
Ricoms |
070 |
wontae |
wontae |
name_050.wav |
name_050.wav |
1 |
07020100403.wav |
|
그룹바이 절을 써도 마찬가지입니다.
SELECT A.SiteId,A.CompanyName,B.ExpertNo,B.ExpertId,B.NAME,B.FILENAME1,B.FILENAME2
, MAX(C.IDARS) IDARS,C.RecFileName,C.Charge
FROM AideExport D
Inner Join Partner A On A.SiteId = D.Partner_SiteId AND A.DelFlag = 'N'
Inner Join Expert B On B.ExpertNo = D.Expert_ExpertNo AND B.DelFlag = 'N'
Inner Join Ars C On C.Expert_ExpertNo = B.ExpertNo AND C.DelFlag = 'N'
WHERE D.DelFlag = 'N'
GROUP BY A.SiteId,A.CompanyName,B.ExpertNo,B.ExpertId,B.NAME
,B.FILENAME1,B.FILENAME2,C.RecFileName,C.Charge
ORDER BY C.IDARS DESC
SiteId |
CompanyName |
ExpertNo |
ExpertId |
NAME |
FILENAME1 |
FILENAME2 |
IDARS |
RecFileName |
Charge |
0003 |
nanjang |
789 |
tv |
tv |
name_070.wav |
name_070.wav |
8 |
78920103334.wav |
|
0003 |
nanjang |
789 |
tv |
tv |
name_070.wav |
name_070.wav |
3 |
78920100404.wav |
|
0001 |
Ricoms |
080 |
narae |
성기배 |
name_010.wav |
name_010.wav |
2 |
08020100404.wav |
(NULL) |
0001 |
Ricoms |
070 |
wontae |
wontae |
name_050.wav |
name_050.wav |
1 |
07020100403.wav |
|
똑같습니다.
이렇게 나오면 안됩니다...
SiteId |
CompanyName |
ExpertNo |
ExpertId |
NAME |
FILENAME1 |
FILENAME2 |
IDARS |
RecFileName |
Charge |
0003 |
nanjang |
789 |
tv |
tv |
name_070.wav |
name_070.wav |
8 |
78920103334.wav |
|
0001 |
Ricoms |
080 |
narae |
성기배 |
name_010.wav |
name_010.wav |
2 |
08020100404.wav |
(NULL) |
0001 |
Ricoms |
070 |
wontae |
wontae |
name_050.wav |
name_050.wav |
1 |
07020100403.wav |
|
위의 표와 같이
IDARS 8이 나와야 합니다. 3은 나올필요 없습니다.
IDARS 3이 같이 나오면 안됩니다.
IDARS 는 ARS의 고유넘버 입니다.
8이라는 것은 최신데이터를 의미하는 겁니다.
한마디로 전문가가 등록한 ARS의 최신데이터 1개만을 가져오는 겁니다.
쿼리 수정좀 부탁드립니다.
MYSQL입니다 |