sql >> Databáze >  >> RDS >> Oracle

Odstraňte duplicitní výsledky ve výběrovém dotazu, který obsahuje sloupec CLOB

K identifikaci jednoho orderid můžete použít analytickou funkci pro každé ordernum - pravděpodobně buď min nebo max, ale jsou k dispozici další funkce, záleží na tom, co potřebujete - v dílčím dotazu a poté filtrujte, abyste získali pouze řádky s identifikovanými ID:

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

Vložené zobrazení získá všechny sloupce a řádky z vaší tabulky, ale ke svému výsledku přidá další sloupec, který má maximální ID ve všech řádcích se stejným číslem objednávky. (Můžete tam přidat jakékoli další filtry, které chcete, nebo kurz).

Vnější filtr pak odpovídá pouze ID pro každé číslo objednávky, které odpovídá této maximální hodnotě.

To předpokládá, že orderid je jedinečný - alespoň pro ordernum ale asi celosvětově. Řekli jste orderdate je vždy stejné pro ordernum ale můžete to zahrnout do oddílu tím, že pokud ne, případně modifikací použité analytické funkce.

(A pak prozkoumejte, jak a proč získáváte duplikáty, a pokuste se je zastavit; poté duplikáty odstraňte ze svého stolu – opatrně...)




  1. Index k zobrazení (Oracle)

  2. Použití vlastního kodéru JSON pro implementaci PostgreSQL JSONB SQLAlchemy

  3. datetime vs smalldatetime v SQL Server:Jaký je rozdíl?

  4. jak uniknout oddělovači z obsahu sloupce při exportu csv