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...)