sql >> Database >  >> RDS >> Oracle

Verwijder dubbele resultaten in een selectiequery die de CLOB-kolom bevat

U kunt een analytische functie gebruiken om een ​​enkele orderid te identificeren voor elk ordernum - waarschijnlijk min of max, maar er zijn andere functies beschikbaar, dit hangt af van wat u nodig hebt - in een subquery en filter vervolgens om alleen de rijen met de geïdentificeerde ID's te krijgen:

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

De inline-weergave haalt alle kolommen en rijen uit uw tabel, maar voegt een extra kolom toe aan het resultaat met de maximale ID voor alle rijen met hetzelfde bestelnummer. (Je kunt daar andere filters of natuurlijk toevoegen).

Het buitenste filter komt dan alleen overeen met de ID voor elk bestelnummer dat overeenkomt met die maximale waarde.

Dit veronderstelt dat orderid is uniek - tenminste voor een ordernum maar vermoedelijk wereldwijd. Je zei de orderdate is altijd hetzelfde voor het ordernum maar je zou dat in de partitie kunnen opnemen door, zo niet, eventueel de gebruikte analytische functie aan te passen.

(En onderzoek dan hoe en waarom u duplicaten krijgt, en probeer ze te stoppen; verwijder vervolgens de duplicaten uit uw tabel - voorzichtig...)




  1. Hoe de functie Degrees() werkt in PostgreSQL

  2. Integer-waarde invoegen in mysql int met INSERT

  3. Meerdere hostnamen en meerdere privileges?

  4. PreparedStatement negeert parameters in de query:java.sql.SQLException:Parameterindex buiten bereik (1> aantal parameters, dat is 0)