sql - 如何在Oracle中排名第一?
我该怎么做?
select top 1 Fname from MyTbl
在Oracle 11g中?
9个解决方案
212 votes
如果您只想要第一个选定的行,您可以:
select fname from MyTbl where rownum = 1
您还可以使用分析函数来排序并获取顶部x:
select max(fname) over (rank() order by some_factor) from MyTbl
mcpeterson answered 2019-03-09T02:22:46Z
137 votes
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
Damian Leszczyński - Vash answered 2019-03-09T02:23:07Z
22 votes
使用Oracle 12c(2013年6月),您可以像以下一样使用它。
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
MSK answered 2019-03-09T02:23:33Z
9 votes
您可以在子查询中使用TOP N和NAME子句,并使用此列代替PARTITION BY。这可以逐步解释。
请参见下表,其中包含两列TOP N和NAME。
如果您只需要前两个日期而不管TOP N,您可以使用以下查询。 逻辑已写入查询内部
-- 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;
结果
在某些情况下,我们需要分别选择TOP N每个NAME的结果。在这种情况下我们可以在子查询中使用PARTITION BY和ORDER BY子句。 请参阅以下查询。
-- 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;
结果
Sarath Avanavu answered 2019-03-09T02:24:30Z
7 votes
你可以做点什么
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
您也可以使用分析函数RANK和/或DENSE_RANK,但ROWNUM可能是最简单的。
Suman answered 2019-03-09T02:25:06Z
6 votes
select * from (
select FName from MyTbl
)
where rownum <= 1;
a'r answered 2019-03-09T02:25:24Z
5 votes
使用:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
如果使用Oracle9i +,您可以考虑使用像ROW_NUMBER()这样的分析函数,但它们的性能不如ROWNUM。
OMG Ponies answered 2019-03-09T02:25:56Z
3 votes
从表中选择第一行并从表中选择一行是两个不同的任务,需要不同的查询。 有很多可能的方法可以做到这一点。 其中四个是:
第一
select max(Fname) from MyTbl;
第二
select min(Fname) from MyTbl;
第三
select Fname from MyTbl where rownum = 1;
第四
select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)
Vikas Hardia answered 2019-03-09T02:26:51Z
2 votes
我遇到了同样的问题,我可以用这个解决方案解决这个问题:
select a.*, rownum
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1
您可以在订购结果之前将第一个值放在首位。
祝好运
user2607028 answered 2019-03-09T02:27:37Z