Anda dapat menggunakan fungsi analitik untuk mengidentifikasi satu orderid
untuk setiap ordernum
- mungkin min atau maks, tetapi fungsi lain tersedia, itu tergantung pada apa yang Anda butuhkan - dalam subkueri, lalu filter untuk hanya mendapatkan baris dengan ID yang diidentifikasi:
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
Tampilan sebaris mendapatkan semua kolom dan baris dari tabel Anda, tetapi menambahkan kolom tambahan ke hasil yang memiliki ID maksimum di semua baris dengan nomor urut yang sama. (Anda dapat menambahkan filter lain yang Anda inginkan di sana, atau tentu saja).
Filter luar kemudian hanya cocok dengan ID untuk setiap nomor pesanan yang cocok dengan nilai maksimum tersebut.
Ini mengasumsikan bahwa orderid
unik - setidaknya untuk ordernum
tapi mungkin secara global. Anda mengatakan orderdate
selalu sama untuk ordernum
tetapi Anda dapat memasukkannya ke dalam partisi dengan jika tidak, mungkin memodifikasi fungsi analitik yang digunakan.
(Dan kemudian selidiki bagaimana dan mengapa Anda mendapatkan duplikat, dan coba hentikan; lalu hapus duplikat dari tabel Anda - hati-hati...)