2017-03-05 9 views
0

を含むselectクエリで重複した結果を排除これは選択クエリです:がCLOB列

select orderid,ordernum,orderdate,orderxml from orders 

クエリが同じordernumで複数の行を返します。 DISTINCTとGroup BYを使用しようとしましたが、orderxmlはclob列です。 クエリで重複した注文番号を削除するにはどうすればよいですか?

+0

、あなたのテーブルに 'ordernum'を複製しなければならないのはなぜ? 'orderdate'と' orderxml'に同じ値を持っていますか?そうでない場合は、これらの列に対してどの値を選択する必要がありますか? – mathguy

+0

はい、orderdateとorderxmlの値は同じです。 – user576914

答えて

0

それぞれordernumの単一のorderidを識別するために使用することができます - おそらくminまたはmaxですが、他の関数を使用できます。必要なものに依存します。サブクエリに依存します。識別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では、おそらく全体的にはおそらくです。 orderdateordernumの場合は常に同じですが、そうでない場合はパーティションに含めることができ、使用する分析関数を変更する可能性があります。

(そして、どのように、なぜあなたが重複を取得している調査し、それらを停止しようとし、その後、あなたのテーブルから重複を削除 - 慎重に...)

関連する問題