Bạn có thể sử dụng một hàm phân tích để xác định một orderid
duy nhất cho mỗi ordernum
- có thể là tối thiểu hoặc tối đa, nhưng các chức năng khác có sẵn, tùy thuộc vào những gì bạn cần - trong một truy vấn con, và sau đó lọc để chỉ lấy các hàng có ID đã xác định:
select orderid, ordernum, orderdate, orderxml
from (
select orderid, ordernum, orderdate, orderxml,
max(orderid) over (partition by ordernum) as maxorderid
from orders
)
where orderid = maxorderid;
Chế độ xem nội tuyến lấy tất cả các cột và hàng từ bảng của bạn, nhưng thêm một cột bổ sung vào kết quả của nó có ID tối đa trên tất cả các hàng có cùng số thứ tự. (Bạn có thể thêm bất kỳ bộ lọc nào khác mà bạn muốn vào đó hoặc khóa học).
Sau đó, bộ lọc bên ngoài chỉ khớp với ID cho mỗi số đơn đặt hàng khớp với giá trị tối đa đó.
Điều này giả định rằng orderid
là duy nhất - ít nhất là đối với một ordernum
nhưng có lẽ trên toàn cầu. Bạn đã nói orderdate
luôn giống nhau đối với ordernum
nhưng bạn có thể đưa nó vào phân vùng bằng cách nếu không, có thể sửa đổi hàm phân tích được sử dụng.
(Và sau đó điều tra cách thức và lý do tại sao bạn nhận được các bản sao và cố gắng ngăn chặn chúng; sau đó xóa các bản sao khỏi bảng của bạn - cẩn thận ...)