分析関数を使用して、単一の 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
は常に同じです ただし、そうでない場合は、使用する分析関数を変更することで、それをパーティションに含めることができます。(そして、重複が発生する方法と理由を調査し、それらを停止しようとします。次に、テーブルから重複を削除します - 慎重に...)