sql >> Base de Datos >  >> RDS >> Oracle

Elimine los resultados duplicados en una consulta de selección que contiene la columna CLOB

Podría usar una función analítica para identificar un solo orderid para cada ordernum - probablemente min o max, pero hay otras funciones disponibles, depende de lo que necesite - en una subconsulta, y luego filtre para obtener solo las filas con las ID identificadas:

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

La vista en línea obtiene todas las columnas y filas de su tabla, pero agrega una columna adicional a su resultado que tiene la ID máxima en todas las filas con el mismo número de orden. (Puede agregar cualquier otro filtro que desee allí, o por supuesto).

El filtro externo solo coincide con el ID de cada número de pedido que coincida con ese valor máximo.

Esto supone que orderid es único, al menos para un ordernum pero presumiblemente a nivel mundial. Dijiste la orderdate es siempre el mismo para el ordernum pero podría incluir eso en la partición si no, posiblemente modificando la función analítica utilizada.

(Y luego investigue cómo y por qué está obteniendo duplicados e intente detenerlos; luego elimine los duplicados de su tabla, con cuidado...)