Je souhaite utiliser la syntaxe Oracle pour sélectionner une seule ligne de la table DUAL
. Par exemple, je veux exécuter cette requête:
SELECT user
FROM DUAL
... et il aurait, comme, 40 disques. Mais je n'ai besoin que d'un seul enregistrement. ... ET, je veux y arriver sans une clause WHERE
.
J'ai besoin de quelque chose dans le champ nom_table tel que:
SELECT FirstRow(user)
FROM DUAL
Vous utilisez ROWNUM.
c'est à dire.
SELECT user FROM Dual WHERE ROWNUM = 1
http://docs.Oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
J'ai trouvé cette "solution" cachée dans l'un des commentaires. Depuis que je le cherchais depuis un moment, je voudrais le souligner un peu (je ne peux pas encore commenter ou faire ce genre de choses ...), c'est donc ce que j'ai utilisé:
SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
Ceci m'imprimera l'entrée [Colonne] désirée à partir de l'entrée la plus récente du tableau, en supposant que [Date] est toujours inséré via SYSDATE.
Cette syntaxe est disponible dans Oracle 12c:
select * from some_table fetch first 1 row only;
select * from some_table fetch first 1 rows only;
select * from some_table fetch first 10 row only;
select * from some_table fetch first 10 rows only;
^^ Je voulais simplement démontrer que la ligne ou les lignes (au pluriel) peuvent être utilisées quel que soit le nombre de lignes souhaité.)
Autant que je sache, la table dual
dans Oracle est une table spéciale comportant une seule ligne. Donc, cela suffirait:
SELECT user
FROM dual
Vous devez utiliser une requête imbriquée comme:
SELECT *
FROM ANY_TABLE_X
WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X)
=> En PL/SQL, "ROWNUM = 1" n'est PAS égal à "TOP 1" de TSQL.
Donc, vous ne pouvez pas utiliser une requête comme celle-ci: "select * from any_table_x où rownum = 1 order by any_column_x;" Comme Oracle obtient la première ligne, applique ensuite la clause order by.
nous avons 3 choix pour obtenir la première ligne de la table de base de données Oracle.
1) select * from table_name where rownum= 1
est le meilleur moyen
2) select * from table_name where id = ( select min(id) from table_name)
3)
select * from
(select * from table_name order by id)
where rownum = 1
Il n'y a pas de condition limit 1
(c'est-à-dire MySQL/PostgresQL) dans Oracle, vous devez spécifier where rownum = 1
.
"FirstRow" est une restriction et donc sa place dans la clause where
pas dans la clause select
. Et ça s'appelle rownum
select * from dual where rownum = 1;
Si n'importe quelle ligne ferait l'affaire, essayez:
select max(user)
from table;
Aucune clause Where.
select name, price
from (
select name, price,
row_number() over (order by price) r
from items
)
where r between 1 and 5;
select a.user from (select user from users order by user) a where rownum = 1
sera le meilleur, une autre option est:
select a.user
from (
select user,
row_number() over (order by user) user_rank,
row_number() over (partition by dept order by user) user_dept_rank
from users
) a
where a.user_rank = 1 or user_dept_rank = 2
dans les scénarios dans lesquels vous voulez différents sous-ensembles, mais je suppose que vous pouvez également utiliser RANK()
, mais j'aime aussi row_number()
over(...)
car aucun regroupement n'est requis.