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

Làm thế nào để chọn 100 hàng hàng đầu trong Oracle?

Giả sử rằng create_time chứa thời gian đơn đặt hàng được tạo và bạn muốn có 100 khách hàng có đơn đặt hàng mới nhất, bạn có thể:

  • thêm create_time trong truy vấn trong cùng của bạn
  • sắp xếp các kết quả của truy vấn bên ngoài của bạn theo create_time desc
  • thêm một truy vấn ngoài cùng lọc 100 hàng đầu tiên bằng cách sử dụng ROWNUM

Truy vấn:

  SELECT * FROM (
     SELECT * FROM (
        SELECT 
          id, 
          client_id, 
          create_time,
          ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
        FROM order
      ) 
      WHERE rn=1
      ORDER BY create_time desc
  ) WHERE rownum <= 100

CẬP NHẬT cho Oracle 12c

Với bản phát hành 12.1, Oracle đã giới thiệu truy vấn Top-N "thực" . Sử dụng FETCH FIRST... mới cú pháp, bạn cũng có thể sử dụng:

  SELECT * FROM (
    SELECT 
      id, 
      client_id, 
      create_time,
      ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
    FROM order
  ) 
  WHERE rn = 1
  ORDER BY create_time desc
  FETCH FIRST 100 ROWS ONLY)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL:Nhận được lỗi 'không khớp với khóa duy nhất hoặc khóa chính' và không biết tại sao

  2. Cách hợp nhất các truy vấn của tôi thành một truy vấn duy nhất (hoặc có thể là một proc được lưu trữ ..)

  3. Truy vấn tham số C # cho Oracle - lỗi nghiêm trọng và nguy hiểm!

  4. pragma self_transaction trong một trình kích hoạt

  5. Oracle SQL * Loader có thể xử lý XML không?