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

Oracle odstraňuje duplikáty na základě podmínky

Toho lze dosáhnout pomocí následujícího dotazu:

delete from  tabela.lorik O
where O.netamt = 0 
AND EXISTS (SELECT 1 FROM tabela.lorik I
WHERE I.ID = O.ID AND I.netamt <> 0)

Předpokládám, že potřebujete odstranit pouze záznamy, kde je netamount = 0 , Pokud ne, napište komentář níže.

Pokud chcete zachovat jeden nenulový záznam a odstranit všechny ostatní (v případě všech nul jeden záznam s nulou jako netamount budou zachovány), pak můžete použít následující dotaz:

DELETE FROM TABELA.LORIK O
WHERE
    ROWID IN (
        SELECT
            RWID
        FROM
            (
                SELECT
                    ROWID AS RWID,
                    ROW_NUMBER() OVER(
                        PARTITION BY ID
                        ORDER BY
                            CASE
                                WHEN NETAMT = 0 THEN 2
                                ELSE 1
                            END
                    ) AS RN
                FROM
                    TABELA.LORIK
            )
        WHERE
            RN > 1
    );

Na zdraví!!



  1. Postgres/JSON - aktualizujte všechny prvky pole

  2. Dotaz na příští časový interval

  3. Ekvivalent funkce REPEAT v Oracle

  4. Postgis - Jak pracovat s datovým typem 'geografie' přes JDBC