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

cách viết truy vấn sql để chọn các hàng có giá trị lớn nhất trong một cột

Loại yêu cầu này (trong đó bạn cần giá trị tối đa hoặc tối thiểu theo một cột, được nhóm lại bởi một cột khác, nhưng bạn cần tất cả dữ liệu từ hàng tối đa hoặc tối thiểu) khá nhiều hàm phân tích là cho. Tôi đã sử dụng row_number - nếu có thể có ràng buộc, bạn cần làm rõ nhiệm vụ (xem Nhận xét của tôi dưới câu hỏi của bạn) và tùy thuộc vào chi tiết, một hàm phân tích khác có thể thích hợp hơn - có lẽ là rank() .

with
     my_table ( id, name, ref, dt, frm ) as (
       select 10, 'Ant' , 100, date '2017-02-02', 'David' from dual union all
       select 10, 'Ant' , 300, date '2016-01-01', 'David' from dual union all
       select  2, 'Cat' ,  90, date '2017-09-09', 'David' from dual union all
       select  2, 'Cat' , 500, date '2016-02-03', 'David' from dual union all
       select  3, 'Bird', 150, date '2017-06-28', 'David' from dual
     )
-- End of simulated table (for testing purposes only, not part of the solution).
-- SQL query begins BELOW THIS LINE.
select   id, name, ref, dt, frm
from     (
           select id, name, ref, dt, frm,
                  row_number() over (partition by id order by ref desc, dt desc) as rn
           from   my_table
         )
where    rn = 1
order by dt desc
;

ID  NAME  REF  DT          FRM 
--  ----  ---  ----------  -----
 3  Bird  150  2017-06-28  David
 2  Cat   500  2016-02-03  David
10  Ant   300  2016-01-01  David


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để liệt kê tất cả các bảng tồn tại trong Liên kết Cơ sở dữ liệu (Oracle)?

  2. Các kế hoạch thực thi của Oracle khi sử dụng toán tử LIKE với hàm DETERMINISTIC

  3. Làm thế nào để tổng hợp mà không sử dụng `GROUP BY`?

  4. Cách tìm ra kích thước tìm nạp tối ưu cho truy vấn đã chọn

  5. Oracle tương đương với SQL Server bao gồm các cột để lập chỉ mục