Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Трябва да избера n реда от всеки k реда на таблица

Ако приемем, че ги поръчвате 1 - 10000 използвайки някаква логика и искате да изведете само редове 1-100,2001-2100,4001-4100,etc тогава можете да използвате ROWNUM псевдоколона:

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.

Или можете да използвате ROW_NUMBER() аналитична функция:

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

Заменете WHERE клауза с:

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. Явни JOIN срещу неявни присъединявания?

  2. проверете за валидна дата, която е декларирана в varchar2

  3. Как да попълним календарна таблица в Oracle?

  4. Кога/защо Oracle добавя NaN към ред в таблица на база данни

  5. Попълнете редове в колона A със стойността на колона B, ако условието в колона A е изпълнено