¿Cómo puedo llegar al top 1 en Oracle? [duplicar]

Resuelto Gold asked hace 14 años • 9 respuestas

¿Cómo hago lo siguiente?

select top 1 Fname from MyTbl

¿ En Oráculo 11g ?

Gold avatar Aug 11 '10 00:08 Gold
Aceptado

Si desea solo una primera fila seleccionada, puede:

select fname from MyTbl where rownum = 1

También puedes usar funciones analíticas para ordenar y tomar la x superior:

select max(fname) over (rank() order by some_factor) from MyTbl
mcpeterson avatar Aug 10 '2010 17:08 mcpeterson
SELECT *
  FROM (SELECT * FROM MyTbl ORDER BY Fname )
 WHERE ROWNUM = 1;
Damian Leszczyński - Vash avatar Aug 10 '2010 17:08 Damian Leszczyński - Vash

Con Oracle 12c (junio de 2013), puede usarlo de la siguiente manera.

SELECT * FROM   MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL          
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
MSK avatar Apr 27 '2015 15:04 MSK

Puede usar ROW_NUMBER()una ORDER BYcláusula en la subconsulta y usar esta columna en reemplazo de TOP N. Esto se puede explicar paso a paso.

Consulte la siguiente tabla que tiene dos columnas NAMEy DT_CREATED.

ingrese la descripción de la imagen aquí

Si necesita tomar solo las dos primeras fechas, independientemente de NAME, puede utilizar la siguiente consulta. La lógica ha sido escrita dentro de la consulta.

-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
    -- Generates numbers in a column in sequence in the order of date
    SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
    NAME,DT_CREATED
    FROM DEMOTOP
)TAB
WHERE RNO<3;

RESULTADO

ingrese la descripción de la imagen aquí

En algunas situaciones, necesitamos seleccionar TOP Nresultados respectivos para cada uno NAME. En tal caso podemos usar PARTITION BYcon una ORDER BYcláusula en la subconsulta. Consulte la siguiente consulta.

-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
  --Generates numbers in a column in sequence in the order of date for each NAME
    SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
    NAME,DT_CREATED
    FROM DEMOTOP
)TAB
WHERE RNO<3;

RESULTADO

ingrese la descripción de la imagen aquí

Sarath Subramanian avatar Nov 06 '2015 04:11 Sarath Subramanian
select * from (
    select FName from MyTbl
)
where rownum <= 1;
a'r avatar Aug 10 '2010 17:08 a'r