sql >> Databasteknik >  >> RDS >> Oracle

Eliminera dubbletter av resultat i en urvalsfråga som innehåller CLOB-kolumn

Du kan använda en analytisk funktion för att identifiera en enda orderid för varje ordernum - förmodligen antingen min eller max, men andra funktioner är tillgängliga, det beror på vad du behöver - i en underfråga, och filtrera sedan för att bara få raderna med de identifierade ID:n:

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 infogade vyn hämtar alla kolumner och rader från din tabell, men lägger till ytterligare en kolumn till resultatet som har det maximala ID för alla rader med samma ordernummer. (Du kan lägga till andra filter du vill där, eller kurs).

Det yttre filtret matchar då endast ID:t för varje ordernummer som matchar det maxvärdet.

Detta förutsätter att orderid är unik - åtminstone för ett ordernum men förmodligen globalt. Du sa orderdate är alltid samma för ordernum men du kan inkludera det i partitionen genom att om inte, eventuellt ändra den analytiska funktionen som används.

(Och undersök sedan hur och varför du får dubbletter, och försök att stoppa dem; ta sedan bort dubbletterna från ditt bord - försiktigt...)




  1. Hur ansluter man till MS SQL Server med Inno Setup?

  2. SQL-returrad om inget resultat hittades

  3. Hur importerar man befintliga *.sql-filer i PostgreSQL 8.4?

  4. Väljer de senaste MySQL-raderna med MAX(tid) WHERE tid <=x