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

Oracleで上位100行を選択する方法は?

    create_timeに注文が作成された時刻が含まれていて、最新の注文を持つ100人のクライアントが必要な場合は、次のことができます。

    • 最も内側のクエリにcreate_timeを追加します
    • 外部クエリの結果をcreate_time descで並べ替えます
    • ROWNUMを使用して最初の100行をフィルタリングする最も外側のクエリを追加します

    クエリ:

      SELECT * FROM (
         SELECT * FROM (
            SELECT 
              id, 
              client_id, 
              create_time,
              ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
            FROM order
          ) 
          WHERE rn=1
          ORDER BY create_time desc
      ) WHERE rownum <= 100
    

    Oracle12cの更新

    リリース12.1で、オラクルは"実際の"Top-Nクエリ を導入しました。 。新しいFETCH FIRST...を使用する 構文については、次を使用することもできます:

      SELECT * FROM (
        SELECT 
          id, 
          client_id, 
          create_time,
          ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn 
        FROM order
      ) 
      WHERE rn = 1
      ORDER BY create_time desc
      FETCH FIRST 100 ROWS ONLY)
    


    1. mysqlの一時テーブル列を一覧表示します

    2. MySQLの列のデータ型を変更するにはどうすればよいですか?

    3. タイプ[java.lang.Object[]]からタイプ[@org.springframework.data.jpa.repository.Queryへの変換に失敗しました

    4. すべてのテキストベースのフィールドに汎用varchar(255)を使用することに不利な点はありますか?