2014-10-13 3 views
0

CRM 시스템에서 병합 된 고객 ID 기록이있는 테이블이 있습니다. 히스토리 리포팅 오라클 스키마의 데이터는 상호 작용 레코드가 생성 된 시점의 데이터입니다. 잠재적 인 이전 ID에서 고객과 관련된 현재 ID를 찾는 방법이 필요합니다. 좀 더 재미있게 만들려면 PL/SQL을 작성할 수있는 권한이 없습니다.이 데이터에 대해 Select 문만 작성할 수 있습니다. 고객 ID_MERGE_HIST 테이블에Oracle 재귀 선택 고객과 관련된 현재 ID 찾기

샘플 데이터

| OLD_ID | NEW_ID | 
+----------+----------+ 
| 44678368 | 47306920 | 
| 47306920 | 48352231 | 
| 48352231 | 48780326 | 
| 48780326 | 50044190 | 

나는이처럼 보이는 결과 집합을 제공하기 위해 재귀 서브 쿼리와 쿼리를 원하는

| INTERACTION_ID | CUST_ID | 
+----------------+----------+ 
| 1    | 44678368 | 
| 2    | 48352231 | 
| 3    | 80044190 | 

샘플 상호 작용 테이블 :

| INTERACTION_ID | CUST_ID | CUR_CUST_ID | 
+----------------+----------+-------------+ 
| 1    | 44678368 | 50044190 | 
| 2    | 48352231 | 50044190 | 
| 3    | 80044190 | 80044190 | 

참고 : Cust_ID 80044190은 한 번도 병합되지 않았습니다. ID_MERGE_HIST 테이블에는 나타나지 않습니다.

모든 도움을 주시면 감사하겠습니다.

답변

0

CONNECT BY 구조를 볼 수 있습니다.

또한 재귀 WITH (설명 중 하나 인 http://gennick.com/database/understanding-the-with-clause)를 사용하여 재생할 수 있습니다. CONNECT BY는 더 좋지만 ORACLE에 고유합니다.

자주 요청하는 경우 관련된 모든 레코드의 첫 번째/마지막 cust_id를 저장할 수 있습니다.

먼저 CUST_ID - 정적 수 있지만 현재의

마지막 CUST_ID에 도착하는 2 홉이 필요합니다 - 즉시 결과를 제공하지만, 모든 새로운 레코드가있는 전체 트리에 대한 업데이 트를 필요로

+0

실제로 Connect By로 시작했지만 각 반복마다 나에게 줄을주고 있다는 것을 알게되었습니다. First and Last라는 용어를 사용하면 실제로 Oracle의 집계 기능을 생각하게되었고 Last를 사용하여 Connect By 선택을 다른 선택으로 래핑하려고합니다. 그게 내가 그걸 알 수있게 해줄거야. – BarryTheSprout

+0

데이터베이스 디자인을 제어 할 수 있다면이 링크가 유용 할 수 있습니다. http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a-relational-database – vav