我如何在Oracle中做第一名?
我如何做到以下几点?
select top 1 Fname from MyTbl
在Oracle 11g中 ?
如果您只需要第一个选定的行,您可以:
select fname from MyTbl where rownum = 1
您也可以使用分析函数来sorting并取顶部的x:
select max(fname) over (rank() order by some_factor) from MyTbl
SELECT * FROM (SELECT * FROM MyTbl ORDER BY Fname ) WHERE ROWNUM = 1;
使用Oracle 12c (2013年6月),您可以像下面一样使用它。
SELECT * FROM MYTABLE --ORDER BY COLUMNNAME -OPTIONAL OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
您可以在子查询中使用ROW_NUMBER()
和ORDER BY
子句,并使用此列代替TOP N
这可以一步一步解释。
请参阅下表,其中有两列NAME
和DT_CREATED
。
如果您只需要取前两个date而不考虑NAME
,则可以使用下面的查询。 逻辑写在查询里面
-- 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;
结果
在某些情况下,我们需要select各NAME
TOP N
结果。 在这种情况下,我们可以在子查询中使用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;
结果
你可以做类似的事情
SELECT * FROM (SELECT Fname FROM MyTbl ORDER BY Fname ) WHERE rownum = 1;
你也可以使用分析函数RANK和/或DENSE_RANK ,但是ROWNUM可能是最简单的。
使用:
SELECT x.* FROM (SELECT fname FROM MyTbl) x WHERE ROWNUM = 1
如果使用Oracle9i +,可以使用像ROW_NUMBER()这样的分析函数,但是它们的性能不如ROWNUM 。
select * from ( select FName from MyTbl ) where rownumn <= 1;
要从表中select第一行并从表中select一行是两个不同的任务,并且需要不同的查询。 有很多可能的方法来做到这一点。 其中四个是:
第一
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)
我有同样的问题,我可以解决这个解决scheme:
select a.*, rownum from (select Fname from MyTbl order by Fname DESC) a where rownum = '1'
您可以先订购您的结果,然后将第一个值放在上面。
祝你好运