Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Elimine resultados duplicados em uma consulta selecionada que contém a coluna CLOB


Você pode usar uma função analítica para identificar um único orderid para cada ordernum - provavelmente min ou max, mas outras funções estão disponíveis, depende do que você precisa - em uma subconsulta e, em seguida, filtre para obter apenas as linhas com os IDs identificados:
select orderid, ordernum, orderdate, orderxml
from (
  select orderid, ordernum, orderdate, orderxml,
    max(orderid) over (partition by ordernum) as maxorderid
  from orders
)
where orderid = maxorderid;

A visualização em linha obtém todas as colunas e linhas de sua tabela, mas adiciona uma coluna adicional ao resultado que tem o ID máximo em todas as linhas com o mesmo número de pedido. (Você pode adicionar quaisquer outros filtros que desejar lá, ou claro).

O filtro externo corresponde apenas ao ID de cada número de pedido que corresponde a esse valor máximo.

Isso pressupõe que orderid é único - pelo menos para um ordernum mas provavelmente globalmente. Você disse a orderdate é sempre o mesmo para o ordernum mas você pode incluir isso na partição, se não, possivelmente modificando a função analítica usada.

(E então investigue como e por que você está obtendo duplicatas e tente pará-las; então remova as duplicatas de sua tabela - com cuidado...)