sql >> データベース >  >> RDS >> Oracle

Oracle:テーブルのk行ごとにn行を選択する必要があります

    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. ハイフン文字を含むOracleクエリ文字列

    2. C# または SQL のいずれかでストアド プロシージャのパラメーターを取得しますか?

    3. 別のテーブルの列を更新する挿入トリガー後のmysql

    4. 複数のテーブルから行を削除する