Можете да използвате аналитична функция, за да идентифицирате един orderid
за всеки ordernum
- вероятно мин. или макс., но са налични и други функции, зависи от това, от което се нуждаете - в подзаявка и след това филтрирайте, за да получите само редовете с идентифицираните идентификатори:
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
Вграденият изглед получава всички колони и редове от вашата таблица, но добавя допълнителна колона към своя резултат, която има максималния идентификатор във всички редове с един и същ номер на поръчка. (Можете да добавите каквито и да е други филтри, които желаете там или разбира се).
След това външният филтър съвпада само с идентификатора за всеки номер на поръчка, който съответства на тази максимална стойност.
Това предполага, че orderid
е уникален - поне за ordernum
но вероятно глобално. Казахте orderdate
винаги е един и същ за ordernum
но бихте могли да го включите в дяла, като ако не, евентуално модифицирате използваната аналитична функция.
(И след това проучете как и защо получавате дубликати и се опитайте да ги спрете; след това премахнете дубликатите от вашата таблица - внимателно...)