sql >> Database teknologi >  >> RDS >> Oracle

Eliminer duplikerede resultater i en udvalgt forespørgsel, der indeholder CLOB-kolonnen

Du kan bruge en analytisk funktion til at identificere en enkelt orderid for hvert ordernum - sandsynligvis enten min eller max, men andre funktioner er tilgængelige, det afhænger af, hvad du har brug for - i en underforespørgsel, og filtrer derefter for kun at få rækkerne med de identificerede ID'er:

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

Den indbyggede visning henter alle kolonner og rækker fra din tabel, men tilføjer en ekstra kolonne til resultatet, der har det maksimale ID på tværs af alle rækker med det samme ordrenummer. (Du kan tilføje andre filtre, du ønsker derind, eller kursus).

Det ydre filter matcher så kun ID'et for hvert ordrenummer, der matcher den maksimale værdi.

Dette forudsætter, at orderid er unik - i hvert fald for et ordernum men formentlig globalt. Du sagde orderdate er altid den samme for ordernum men du kan inkludere det i partitionen ved, hvis ikke, muligvis at ændre den anvendte analytiske funktion.

(Og så undersøg hvordan og hvorfor du får dubletter, og prøv at stoppe dem; fjern derefter dubletterne fra din tabel - forsigtigt...)




  1. autofuldførelse viser alle poster, søger ikke

  2. MySQL sletter ikke poster

  3. MySQL join på max værdi

  4. regex i SQL for at detektere et eller flere ciffer