Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Loại bỏ các kết quả trùng lặp trong một truy vấn chọn có chứa cột CLOB

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 ...)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn sql để kiểm tra xem chuỗi con của cột 1 có chứa giá trị của cột khác hay không

  2. Entity Framework và Oracle

  3. Sử dụng hàm Max () để chọn giá trị nhóm

  4. Các ký tự đặc biệt của Oracle

  5. Nhận nhân viên đang hoạt động trong phạm vi ngày cụ thể