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

Oracle:Tôi cần chọn n hàng từ mỗi k hàng của bảng

Giả sử bạn đang đặt hàng chúng 1 - 10000 sử dụng một số logic và chỉ muốn xuất các hàng 1-100,2001-2100,4001-4100,etc thì bạn có thể sử dụng ROWNUM cột giả:

SELECT *
FROM   (
  SELECT t.*,
         ROWNUM AS rn            -- Secondly, assign a row number to the ordered rows
  FROM   (
    SELECT *
    FROM   your_table
    ORDER BY your_condition      -- First, order the data
  ) t
)
WHERE MOD( rn - 1, 2000 ) < 100; -- Finally, filter the top 100 per 2000.

Hoặc bạn có thể sử dụng ROW_NUMBER() chức năng phân tích:

SELECT *
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER ( ORDER BY your_condition ) AS rn
  FROM   your_table
)
WHERE  MOD( rn - 1, 2000 ) < 100;

Thay thế WHERE mệnh đề với:

WHERE rn - POWER(
             2,
             TRUNC( CAST( LOG( 2, CEIL( rn / 1000 ) ) AS NUMBER(20,4) ) )
           ) * 1000 + 1000 <= 100


  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 (11.2.0.1.0) - CTE đệ quy với biểu thức ngày tháng

  2. ORA-00054:tài nguyên bận và có được với NOWAIT được chỉ định

  3. Quay lại lời nhắc sqlplus

  4. Điều gì xảy ra với câu lệnh cập nhật của tôi với một phép nối trong Oracle?

  5. Chèn nhiều hàng từ Khung dữ liệu R vào Cơ sở dữ liệu Oracle