K identifikaci jednoho orderid
můžete použít analytickou funkci pro každé ordernum
- pravděpodobně buď min nebo max, ale jsou k dispozici další funkce, záleží na tom, co potřebujete - v dílčím dotazu a poté filtrujte, abyste získali pouze řádky s identifikovanými 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;
Vložené zobrazení získá všechny sloupce a řádky z vaší tabulky, ale ke svému výsledku přidá další sloupec, který má maximální ID ve všech řádcích se stejným číslem objednávky. (Můžete tam přidat jakékoli další filtry, které chcete, nebo kurz).
Vnější filtr pak odpovídá pouze ID pro každé číslo objednávky, které odpovídá této maximální hodnotě.
To předpokládá, že orderid
je jedinečný - alespoň pro ordernum
ale asi celosvětově. Řekli jste orderdate
je vždy stejné pro ordernum
ale můžete to zahrnout do oddílu tím, že pokud ne, případně modifikací použité analytické funkce.
(A pak prozkoumejte, jak a proč získáváte duplikáty, a pokuste se je zastavit; poté duplikáty odstraňte ze svého stolu – opatrně...)