Możesz użyć funkcji analitycznej do zidentyfikowania pojedynczego orderid
dla każdego ordernum
- prawdopodobnie min lub max, ale inne funkcje są dostępne, to zależy od tego, czego potrzebujesz - w podzapytaniu, a następnie filtruj, aby uzyskać tylko wiersze o zidentyfikowanych identyfikatorach:
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
Widok wbudowany pobiera wszystkie kolumny i wiersze z tabeli, ale dodaje do wyniku dodatkową kolumnę z maksymalnym identyfikatorem we wszystkich wierszach o tym samym numerze zamówienia. (Możesz tam dodać dowolne inne filtry lub oczywiście).
Filtr zewnętrzny dopasowuje wtedy tylko identyfikator dla każdego numeru zamówienia, który odpowiada tej maksymalnej wartości.
Zakłada się, że orderid
jest unikalny - przynajmniej dla ordernum
ale przypuszczalnie na całym świecie. Powiedziałeś orderdate
jest zawsze taki sam dla ordernum
ale możesz dołączyć to do partycji, jeśli nie, ewentualnie modyfikując używaną funkcję analityczną.
(A następnie zbadaj, w jaki sposób i dlaczego otrzymujesz duplikaty, i spróbuj je powstrzymać; następnie usuń duplikaty ze swojego stołu - ostrożnie...)