sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo seleccionar las 100 filas principales en Oracle?

Suponiendo que create_time contiene la hora en que se creó el pedido y desea los 100 clientes con los últimos pedidos, puede:

  • agregue create_time en su consulta más interna
  • ordene los resultados de su consulta externa por el create_time desc
  • agregue una consulta más externa que filtre las primeras 100 filas usando ROWNUM

Consulta:

  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

ACTUALIZACIÓN para Oracle 12c

Con la versión 12.1, Oracle introdujo Consultas Top-N "reales" . Usando el nuevo FETCH FIRST... sintaxis, también puede usar:

  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)