2 속성의 최대 값을 기준으로 Oracle SQL을 사용하여 대형 데이터 세트에서 레코드를 중복 제거하는 효과적인 방법을 아는 사람이 있는지 궁금합니다.오라클은 2 열의 최대 값을 기준으로 행을 중복 제거합니다.
아래 가상의 예에서 나는 최대 transactionid를 먼저 선택하여 모든 중복 된 COMPANYID/CHILD ID 쌍을 제거하려고합니다. 페이로드 ID에 여전히 중복이있는 경우 최대 BATCHID.
참고 : 트랜잭션
<p> CompanyID| ChildID | transactionid| BatchID | Product Details </P>
<p> ABC EFG 306 Product1 </p>
<p>ABC EFG 306 54 Product2</p>
<p>ZXY BFG 405 003 Product1</p>
<p>ZXY BFG 405 004 Product2</p>
<p>ZXY BFG 407 Product3</p>
예상 결과 :
<p>ABC | EFG | 306 | 54 | Product 2 --selected on basis of highest transactionid and batchid </P>
<p>ZXY | BFG | 405 | 407 | Product 3 --selected on basis of highest transactionid </p>
는 TransactionId 및 일괄 ID는 (가장 낮은 값으로 예상되는) null 값
표가있을 수 있습니다
나는 envisione 단순히 D : 1)는 TransactionId에 최대 기능을 사용하고 이외에 "드 속아 '제품 정보를 얻기 위해 원래의 설정으로 설정하는
아무도 알고 있나요 가입 2) 자기를 최대 일괄 ID에 대한 결과를 subquerying 더 효율적이고 깨끗한 방법으로이를 달성하고 null을 더 잘 처리 할 수있는 방법을 찾고 있습니까?
의견을 보내주십시오.
오라클 11g에서
감사합니다. 이전에 인용 한 사과는 잘못되었습니다. 귀하의 제안은 완벽하고 매우 빠르게 진행되었습니다. 마음에 들지 않으면 dense_ranking이 어떻게 작동하는지 설명해 주시겠습니까? 특히 max_product_details. 내가 이해하는 바로는 transaction_id와 batch_id를 기반으로 순위를 매기고 마지막 레코드 만 표시 (오름차순 - 따라서 최대)합니다. 이 기능은 내게는 외계인이기 때문에 나는 여전히 내 머리를 쥐고있다. 이것은 확실히 미래에 유용 할 것입니다! – user3484575
환영합니다! 자세한 설명은 편집을 참조하십시오. – Emmanuel