Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment sélectionner les 100 premières lignes dans Oracle ?

En supposant que create_time contient l'heure à laquelle la commande a été créée, et que vous voulez les 100 clients avec les dernières commandes, vous pouvez :

  • ajoutez le create_time dans votre requête la plus profonde
  • ordonnez les résultats de votre requête externe par create_time desc
  • ajouter une requête la plus externe qui filtre les 100 premières lignes à l'aide de ROWNUM

Requête :

  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

MISE À JOUR pour Oracle 12c

Avec la version 12.1, Oracle a introduit les "vraies" requêtes Top-N . Utilisation du nouveau FETCH FIRST... syntaxe, vous pouvez également utiliser :

  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)