¿Cómo puedo llegar al top 1 en Oracle? [duplicar]
¿Cómo hago lo siguiente?
select top 1 Fname from MyTbl
¿ En Oráculo 11g ?
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
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
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
Puede usar ROW_NUMBER()
una ORDER BY
clá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 NAME
y DT_CREATED
.
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
En algunas situaciones, necesitamos seleccionar TOP N
resultados respectivos para cada uno NAME
. En tal caso podemos usar PARTITION BY
con una ORDER BY
clá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
select * from (
select FName from MyTbl
)
where rownum <= 1;