sql >> Databáze >  >> RDS >> Oracle

Oracle:Potřebuji vybrat n řádků z každých k řádků tabulky

Za předpokladu, že je objednáváte 1 - 10000 používáte nějakou logiku a chcete vydávat pouze řádky 1-100,2001-2100,4001-4100,etc pak můžete použít ROWNUM pseudosloupec:

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.

Nebo můžete použít ROW_NUMBER() analytická funkce:

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

Nahraďte WHERE klauzule s:

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


  1. SQLITE nemůže upgradovat databázi pouze pro čtení z verze 1 na 2

  2. Převod dotazů SELECT DISTINCT ON z Postgresql na MySQL

  3. SQL WHERE řetězec LIKE pole

  4. Vložení dat, pokud je počet řádků větší než 0, nefunguje