Si vous voulez juste une première ligne sélectionnée, vous pouvez:
select fname from MyTbl where rownum = 1
Vous pouvez également utiliser des fonctions analytiques pour ordonner et prendre le top x:
select max(fname) over (rank() order by some_factor) from MyTbl
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
Avec Oracle 12c (juin 2013), vous pouvez l'utiliser comme suit.
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
Vous pouvez utiliser ROW_NUMBER()
avec une clause ORDER BY
dans la sous-requête et utiliser cette colonne à la place de TOP N
. Ceci peut être expliqué pas à pas.
Voir le tableau ci-dessous qui a deux colonnes NAME
et DT_CREATED
.
Si vous ne devez prendre que les deux premières dates indépendamment de NAME
, vous pouvez utiliser la requête ci-dessous. La logique a été écrite dans la requête
-- 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;
RÉSULTAT
Dans certaines situations, nous devons sélectionner TOP N
résultats pour chaque NAME
. Dans ce cas, nous pouvons utiliser PARTITION BY
avec une clause ORDER BY
dans la sous-requête. Reportez-vous à la requête ci-dessous.
-- 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;
RÉSULTAT
Vous pouvez faire quelque chose comme
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
Vous pouvez également utiliser les fonctions analytiques RANK et/ou DENSE_RANK, mais ROWNUM est probablement la plus simple.
select * from (
select FName from MyTbl
)
where rownum <= 1;
Utilisation:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
Si vous utilisez Oracle9i +, vous pourriez regarder tiliser des fonctions analytiques telles que ROW_NUMBER () mais elles ne fonctionneront pas aussi bien que ROWNUM .
Pour sélectionner la première ligne d'un tableau et pour sélectionner une ligne d'un tableau, deux tâches différentes nécessitent une requête différente. Il y a plusieurs façons possibles de le faire. Quatre d'entre eux sont:
Première
select max(Fname) from MyTbl;
Seconde
select min(Fname) from MyTbl;
Troisième
select Fname from MyTbl where rownum = 1;
Quatrième
select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)
J'ai eu le même problème, et je peux résoudre ce problème avec cette solution:
select a.*, rownum
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1
Vous pouvez commander votre résultat avant d'avoir la première valeur en haut.
Bonne chance