Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:muszę wybrać n wierszy z każdego k wierszy tabeli

Zakładając, że je zamawiasz 1 - 10000 używając pewnej logiki i chcesz wypisać tylko wiersze 1-100,2001-2100,4001-4100,etc wtedy możesz użyć ROWNUM pseudokolumna:

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.

Możesz też użyć ROW_NUMBER() funkcja analityczna:

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

Zastąp WHERE klauzula z:

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. Jak uzyskać nazwę klasy sterownika (nie nazwę sterownika) z połączenia jdbc?

  2. Jak wstawić BLOB do Oracle za pomocą Pythona?

  3. Przeanalizuj json przez json_table w Oracle 18

  4. ORA-30926:nie można uzyskać stabilnego zestawu wierszy w tabelach źródłowych

  5. Czy operacja wstawiania może spowodować, że kolejna operacja DDL będzie czekać?