sql >> データベース >  >> RDS >> Oracle

CLOB 列を含む選択クエリで重複する結果を排除する

    分析関数を使用して、単一の orderid を識別することができます ordernum ごとに - おそらく最小または最大のいずれかですが、他の関数が利用可能です。必要なものによって異なります - サブクエリで、識別された 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;
      

    インライン ビューはテーブルからすべての列と行を取得しますが、同じ順序番号を持つすべての行で最大 ID を持つ追加の列を結果に追加します。 (そこまたはコースに必要な他のフィルタを追加できます)。

    外側のフィルターは、その最大値に一致する各注文番号の ID のみに一致します。

    これは orderid 一意です - 少なくとも ordernum に対して しかし、おそらく世界的に。あなたはorderdateを言いました ordernum は常に同じです ただし、そうでない場合は、使用する分析関数を変更することで、それをパーティションに含めることができます。

    (そして、重複が発生する方法と理由を調査し、それらを停止しようとします。次に、テーブルから重複を削除します - 慎重に...)




    1. データベースメールのスクリプト設定

    2. Geekbench3を使用したデータベースサーバーのパフォーマンスの評価

    3. オラクルでblobサイズを見つけるためのdbms_lob.getlength()とlength()

    4. PDOを使用したpostgresでの自動ロールバック