如何从 oraclesql 中只选择1行?

我想使用 Oracle 语法从表 DUAL中只选择1行。例如,我想执行这个查询:

SELECT user
FROM DUAL

大概有40张唱片。但我只需要一张唱片。... 而且,我想让它在没有 WHERE条款的情况下发生。

我需要 table _ name 字段中的内容,比如:

SELECT FirstRow(user)
FROM DUAL
808102 次浏览

使用 ROWNUM。

也就是说。

SELECT user FROM Dual WHERE ROWNUM = 1

Http://docs.oracle.com/cd/b19306_01/server.102/b14200/pseudocolumns009.htm

Oracle 中没有 limit 1条件(即 MySQL/PostresSQL) ,您需要指定 where rownum = 1

如果任何一行都可以,请尝试:

select max(user)
from table;

没有地点条款。

“ FirstRow”是一个限制,因此它在 where子句中的位置不在 select子句中。它叫 Rownum

select * from dual where rownum = 1;

据我所知,Oracle 中的 dual表是一个只有一行的特殊表。所以,这就足够了:

SELECT user
FROM dual

答案是:

您应该使用嵌套查询:

SELECT *
FROM ANY_TABLE_X
WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X)

在 PL/SQL 中“ ROWNUM = 1”不等于 TSQL 的“ TOP 1”。

因此不能使用这样的查询: “ select * from any _ table _ x where rownum = 1 order by any _ column _ x;”因为 Oracle 获取第一行然后应用 order by 子句。

select max()更灵活的是:

select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A

我在其中一条评论中找到了这个“解决方案”。因为我查了一会儿,我想突出它一点(还不能评论或做这样的东西...) ,所以这是我使用的:

SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1

假设始终通过 SYSDATE 插入[ Date ] ,这将从表中的最新条目中打印所需的[ Column ]条目。

select name, price
from (
select name, price,
row_number() over (order by price) r
from items
)
where r between 1 and 5;

这种语法可以在 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;

^ ^ 我只是想证明,无论行数多少,都可以使用行或行(复数)。)

我们有3个选择来获得 OracleDB 表中的第一行。

1) select * from table_name where rownum= 1是最好的方法

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

select a.user from (select user from users order by user) a where rownum = 1

将表现最佳,另一个选择是:

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

在场景中,你想要不同的子集,但我想你也可以使用 RANK()但是,我也喜欢 row_number() over(...),因为没有分组是必需的。

如果希望只返回具有最少子查询的排序结果的第一行,请尝试这样做:

select *
from ( select a.*
, row_number() over ( order by sysdate_col desc ) as row_num
from table_name a )
where row_num = 1;