Oracle
 sql >> Database >  >> RDS >> Oracle

Come selezionare le prime 100 righe in Oracle?

Supponendo che create_time contenga l'ora in cui è stato creato l'ordine e desideri i 100 clienti con gli ultimi ordini, puoi:

  • aggiungi create_time nella tua query più intima
  • ordina i risultati della tua query esterna in base al create_time desc
  • aggiungi una query più esterna che filtri le prime 100 righe utilizzando ROWNUM

Domanda:

  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

AGGIORNAMENTO per Oracle 12c

Con la versione 12.1, Oracle ha introdotto "real" Top-N query . Usando il nuovo FETCH FIRST... sintassi, puoi anche usare:

  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)