[英]How to select only 1 row from oracle sql?
我想使用 oracle 語法從表DUAL
僅選擇 1 行。 例如,我想執行這個查詢:
SELECT user
FROM DUAL
...它應該有 40 條記錄。 但我只需要一張唱片。 ...AND,我想在沒有WHERE
子句的情況下實現它。
我需要 table_name 字段中的某些內容,例如:
SELECT FirstRow(user)
FROM DUAL
您使用 ROWNUM。
IE。
SELECT user FROM Dual WHERE ROWNUM = 1
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
我發現這個“解決方案”隱藏在其中一條評論中。 由於我查了一段時間,我想強調一下(還不能發表評論或做這樣的事情......),所以這是我使用的:
SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
這將從表中的最新條目中打印出所需的 [Column] 條目,假設 [Date] 始終通過 SYSDATE 插入。
此語法在 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 種選擇來獲取 Oracle DB 表中的第一行。
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 *
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 子句。
據我所知,Oracle中的dual
表是一個只有一行的特殊表。 所以,這就足夠了:
SELECT user
FROM dual
Oracle 中沒有limit 1
條件(即 MySQL / PostgresSQL),您需要指定where rownum = 1
。
"FirstRow" 是一個限制,因此它位於where
子句中而不是select
子句中。 它被稱為 rownum
select * from dual where rownum = 1;
如果任何行都可以,請嘗試:
select max(user)
from table;
沒有 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
將表現最好,另一種選擇是:
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;
比select max()
更靈活的是:
select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.