相关疑难解决方法(0)

如何在订购后限制Oracle查询返回的行数?

有没有办法让Oracle查询表现得像包含一个MySQL limit子句?

MySQL,我可以这样做:

select * 
from sometable
order by name
limit 20,10
Run Code Online (Sandbox Code Playgroud)

获得第21行到第30行(跳过前20行,给出下一行10).在行之后选择行order by,因此它实际上按字母顺序从第20个名称开始.

Oracle,人们提到的唯一的事情是rownum伪列,但它之前 进行了评估order by,这意味着:

select * 
from sometable
where rownum <= 10
order by name
Run Code Online (Sandbox Code Playgroud)

将返回按名称排序的十行的随机集合,这通常不是我想要的.它也不允许指定偏移量.

sql oracle pagination limit

966
推荐指数
10
解决办法
134万
查看次数

236
推荐指数
7
解决办法
60万
查看次数

Oracle SELECT TOP 10条记录

我在Oracle中的SQL语句存在很大问题.我想选择STORAGE_DB订购的TOP 10记录,这些记录不在其他select语句的列表中.

这个适用于所有记录:

SELECT DISTINCT 
  APP_ID, 
  NAME, 
  STORAGE_GB, 
  HISTORY_CREATED, 
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE  
  FROM HISTORY WHERE 
      STORAGE_GB IS NOT NULL AND 
        APP_ID NOT IN (SELECT APP_ID
                       FROM HISTORY
                        WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009') 
Run Code Online (Sandbox Code Playgroud)

但是当我加入时

AND ROWNUM <= 10
ORDER BY STORAGE_GB DESC
Run Code Online (Sandbox Code Playgroud)

我得到了某种"随机"记录.我认为,因为限制在订单之前到位.

有人有一个很好的解决方案吗?另一个问题:这个查询真的很慢(10k +记录)

sql oracle top-n

126
推荐指数
5
解决办法
74万
查看次数

如何正确使用Oracle ORDER BY和ROWNUM?

我很难将存储过程从SQL Server转换为Oracle,以使我们的产品与之兼容.

我有查询根据时间戳返回一些表的最新记录:

SQL Server:

SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC
Run Code Online (Sandbox Code Playgroud)

=>这将使我回到最近的记录

甲骨文:

SELECT *
FROM raceway_input_labo 
WHERE  rownum <= 1
ORDER BY t_stamp DESC
Run Code Online (Sandbox Code Playgroud)

=>那将返回最旧的记录(可能取决于索引),无论ORDER BY声明如何!

我以这种方式封装了Oracle查询以满足我的要求:

SELECT * 
FROM 
    (SELECT *
     FROM raceway_input_labo 
     ORDER BY t_stamp DESC)
WHERE  rownum <= 1
Run Code Online (Sandbox Code Playgroud)

它的工作原理.但这听起来像是一个可怕的黑客,特别是如果我在相关的表格中有很多记录.

实现这一目标的最佳方法是什么?

sql oracle sql-order-by rownum

110
推荐指数
3
解决办法
26万
查看次数