transponer registros multiple filas ejemplos developer convertir consultas comandos columns columnas 10g sql oracle oracle11g greatest-n-per-group

sql - registros - pivot oracle 10g



¿Cómo hago top 1 en Oracle? (9)

¿Cómo hago lo siguiente?

select top 1 Fname from MyTbl

En Oracle 11g ?


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


Para seleccionar la primera fila de una tabla y seleccionar una fila de una tabla son dos tareas diferentes y se necesita una consulta diferente. Hay muchas formas posibles de hacerlo. Cuatro de ellos son:

primero

select max(Fname) from MyTbl;

Segundo

select min(Fname) from MyTbl;

Tercero

select Fname from MyTbl where rownum = 1;

Cuarto

select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)


Podría usar ROW_NUMBER() con una cláusula ORDER BY en la ROW_NUMBER() 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 solo necesita tomar las dos primeras fechas independientemente de NAME , puede usar 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, debemos seleccionar los resultados TOP N respectivos para cada NAME . En tal caso, podemos usar PARTITION BY con una cláusula ORDER BY 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


Puedes hacer algo como

SELECT * FROM (SELECT Fname FROM MyTbl ORDER BY Fname ) WHERE rownum = 1;

También puede usar las funciones analíticas RANK y / o DENSE_RANK , pero ROWNUM es probablemente la más fácil.


Si solo desea una primera fila seleccionada, puede:

select fname from MyTbl where rownum = 1

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

select max(fname) over (rank() order by some_factor) from MyTbl


Tuve el mismo problema y puedo solucionarlo con esta solución:

select a.*, rownum from (select Fname from MyTbl order by Fname DESC) a where rownum = 1

Puede ordenar su resultado antes de tener el primer valor en la parte superior.

Buena suerte



SELECT * FROM (SELECT * FROM MyTbl ORDER BY Fname ) WHERE ROWNUM = 1;


select * from ( select FName from MyTbl ) where rownum <= 1;