Gol*_*old 236 sql oracle oracle11g greatest-n-per-group
我该怎么做?
select top 1 Fname from MyTbl
Run Code Online (Sandbox Code Playgroud)
mcp*_*son 249
如果您只想要第一个选定的行,您可以:
select fname from MyTbl where rownum = 1
Run Code Online (Sandbox Code Playgroud)
您还可以使用分析函数来排序并获取顶部x:
select max(fname) over (rank() order by some_factor) from MyTbl
Run Code Online (Sandbox Code Playgroud)
Dam*_*ash 156
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
Run Code Online (Sandbox Code Playgroud)
MSK*_*MSK 27
使用Oracle 12c(2013年6月),您可以像以下一样使用它.
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
你可以使用ROW_NUMBER()一个ORDER BY子查询子句和更换使用此列TOP N.这可以一步一步解释.
请参阅下表,其中包含两列NAME和DT_CREATED.
如果您只需要前两个日期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;
Run Code Online (Sandbox Code Playgroud)
结果
在某些情况下,我们需要选择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;
Run Code Online (Sandbox Code Playgroud)
结果
select * from (
select FName from MyTbl
)
where rownum <= 1;
Run Code Online (Sandbox Code Playgroud)
你可以做点什么
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
Run Code Online (Sandbox Code Playgroud)
您也可以使用分析函数RANK和/或DENSE_RANK,但ROWNUM可能是最简单的.
使用:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
Run Code Online (Sandbox Code Playgroud)
如果使用Oracle9i +,您可以考虑使用像ROW_NUMBER()这样的分析函数,但它们的性能不如ROWNUM.
| 归档时间: |
|
| 查看次数: |
595427 次 |
| 最近记录: |