2017-03-05 5 views
0

을 포함하는 선택 쿼리에서 중복 결과를 제거합니다. DISTINCT와 Group BY를 사용하려고했지만 orderxml은 clob 열입니다. 쿼리에서 중복 주문 번호를 제거하려면 어떻게합니까?이는 선택 쿼리입니다 CLOB 열

+0

왜 당신은 당신의 테이블에 중복'ordernum'을해야합니까? 그들은'orderdate'와'orderxml'에 대해 같은 값을 가지고 있습니까? 그렇지 않은 경우 해당 열을 선택해야하는 값은 무엇입니까? – mathguy

+0

예, orderdate 및 orderxml에 대해 동일한 값을가집니다. – user576914

답변

0

ordernum 각각에 대해 orderid (최소 또는 최대)을 나타내는 분석 함수를 사용할 수 있지만 다른 함수를 사용할 수 있습니다. 필요에 따라 달라집니다. 하위 쿼리에서 필터를 사용하여 행만 가져옵니다. 식별 ID를 가진 :

select orderid, ordernum, orderdate, orderxml 
from (
    select orderid, ordernum, orderdate, orderxml, 
    max(orderid) over (partition by ordernum) as maxorderid 
    from orders 
) 
where orderid = maxorderid; 

인라인보기는 테이블에서 모든 행과 열을 얻을 수 있지만, 동일한 순서 번호를 가진 모든 행에 걸쳐 최대 ID가 그 결과에 추가 열을 추가합니다. (거기에 원하는 다른 필터를 추가 할 수 있습니다.)

외부 필터는 최대 값과 일치하는 각 주문 번호의 ID와 일치합니다.

여기는 orderid이 고유하다고 가정합니다. 적어도 ordernum은 아니지만 전 세계적으로 추정됩니다. orderdateordernum의 경우 항상 동일하지만 그렇지 않은 경우 파티션에 포함시킬 수 있으며 사용 된 분석 함수를 수정할 가능성이 있습니다. (다음 그리고 당신은 중복을 얻는 방법과 이유를 조사하고이를 막으려 후 테이블에서 중복을 제거 - 신중하게 ...)