此问题已在此处有答案:
How do I limit the number of rows returned by an Oracle query after ordering?(15个回答)
11个月前关闭。
date value
18/5/2010, 1 pm 40
18/5/2010, 2 pm 20
18/5/2010, 3 pm 60
18/5/2010, 4 pm 30
18/5/2010, 5 pm 60
18/5/2010, 6 pm 25
我需要查询具有max(value)的行(即60).所以,这里我们得到两行。从中,我需要当天时间戳最小的行(即18/5/2010,下午3点-> 60)
9条答案
按热度按时间hgqdbh6s1#
像TOP、LIMIT、ROWNUM等关键字是依赖于数据库的。请阅读这篇文章了解更多信息。
http://en.wikipedia.org/wiki/Select_(SQL)#Result_limits
Oracle:可以使用ROWNUM。
更具体地回答这个问题:
yshpjwxd2#
分析!这避免了必须访问表两次:
xxhby3vn3#
答案是添加子选择:
这应该可以工作,并摆脱了在日期子句中有额外子选择的必要性。
6yt4nkrj4#
你好罗伯
exdqitrt5#
从技术上讲,这与@Sujee的答案相同。这也取决于您的Oracle版本是否正常工作。(我认为这种语法是在Oracle 12中引入的。?)
正如我所说,如果你看看引擎盖下,我认为这段代码是由Oracle优化器内部解压缩的,读起来像@Sujee的。然而,我对漂亮的编码很着迷,没有好的理由嵌套
select
语句并不算漂亮!!:-Pbgtovc5b6#
在Oracle中:
这将根据范围获取表中max(high_瓦尔)的键。
cpjpxq1n7#
在Oracle DB中:
eqfvzcg88#
最简单的答案是
--设置名为“t1”的测试表
--加载数据。--注:日期格式与问题中不同
--查找具有最大数量和最小日期的行。
我知道你可以做“TOP 1”的答案,但通常你的解决方案变得足够复杂,你不能使用它的一些原因。
7ajki6be9#
可以使用此函数,ORACLE DB