标签: rownum

如何正确使用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万
查看次数

postgresql中的Rownum

有没有办法在postgresql中模拟rownum?

postgresql rownum

70
推荐指数
4
解决办法
13万
查看次数

SQL ROWNUM如何返回特定范围之间的行

如何返回特定范围的ROWNUM值?

我正在尝试以下方法:

select * from maps006 where rownum >49 and rownum <101
Run Code Online (Sandbox Code Playgroud)

这仅返回与<运算符匹配的行.

sql database oracle rownum

31
推荐指数
4
解决办法
14万
查看次数

21
推荐指数
1
解决办法
3万
查看次数

使用rownum选择表的第二行

我试过以下查询:

select empno from (
                   select empno 
                     from emp
                    order by sal desc
                  )
where rownum = 2
Run Code Online (Sandbox Code Playgroud)

这不会返回任何记录.

当我尝试这个查询

 select rownum,empno from (
                        select empno from emp order by sal desc) 
Run Code Online (Sandbox Code Playgroud)

它给了我这个输出:

ROWNUM  EMPNO      
1       7802        
2       7809    
3       7813    
4       7823
Run Code Online (Sandbox Code Playgroud)

谁能告诉我第一次查询的问题是什么?为什么在添加ROWNUM过滤器时没有返回任何记录?

sql oracle oracle10g rownum

21
推荐指数
2
解决办法
7万
查看次数

Oracle:使用ROWNUM和ORDER BY子句更新表列

我想填充一个带有运行整数的表列,所以我想使用ROWNUM.但是,我需要根据其他列的顺序填充它,例如ORDER BY column1, column2.遗憾的是,由于Oracle不接受以下声明,因此不可能:

UPDATE table_a SET sequence_column = rownum ORDER BY column1, column2;
Run Code Online (Sandbox Code Playgroud)

也不是以下语句(尝试使用WITH子句):

WITH tmp AS (SELECT * FROM table_a ORDER BY column1, column2)
UPDATE tmp SET sequence_column = rownum;
Run Code Online (Sandbox Code Playgroud)

那么如何使用SQL语句并且不依赖于PL/SQL中的游标迭代方法呢?

sql oracle rownum sql-update

17
推荐指数
1
解决办法
7万
查看次数

如何在Oracle 11g的"select"查询中添加偏移量?

如何在Oracle 11g中的"选择"查询中添加偏移量.我只知道如何添加限制,例如rownum <= 5 这个问题不重复,我已经检查了其他问题并且与我的相关.

那么,如何在Oracle 11g中添加偏移量呢?

sql oracle pagination oracle11g rownum

11
推荐指数
1
解决办法
2万
查看次数

什么是rowID&rowNum(ROWID vs ROWNUM)

我想知道rowID和之间的区别rowNUM

以及如何在我们的表中看到这两个.

当我执行这个:

SELECT * FROM emp WHERE rownum=1
Run Code Online (Sandbox Code Playgroud)

它返回一个查询,但是当我对rowid执行相同操作时,它说

不一致的数据类型:预期ROWID获得NUMBER

甚至在某些表中,rownum返回null.为什么这样?

请澄清一下:rowid vs rownum?(演示查询)

谢谢

编辑:需要使用别名来显示ROWIDROWNUM(因为它们是伪列),如:

SELECT rownum r1, rowid r2 FROM emp

sql oracle10g rowid rownum

11
推荐指数
1
解决办法
7万
查看次数

如何根据行本身的数量字段返回多个相同的行?

我正在使用oracle从购物应用中输出订单项.每个项目的数量字段可能大于1,如果是,我想将该行返回N次.

这就是我正在谈论的一张桌子

product_id, quanity
1, 3,
2, 5
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个可以返回的查询

1,3
1,3
1,3
2,5
2,5
2,5
2,5
2,5
Run Code Online (Sandbox Code Playgroud)

这可能吗?我看到了SQL Server 2005的这个答案,我正在寻找oracle中几乎所有的东西.遗憾的是,建立专用号码表不是一种选择.

oracle select repeat rownum

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

Oracle中分页查询的速度

这对我来说是一个永无止境的话题,我想知道我是否会忽视某些事情.基本上我在应用程序中使用两种类型的SQL语句:

  1. 具有"后备"限制的常规查询
  2. 排序和分页查询

现在,我们正在谈论针对具有数百万条记录的表的一些查询,加入另外5个具有数百万条记录的表.显然,我们几乎不想获取所有这些,这就是为什么我们有上述两种方法来限制用户查询.

案例1非常简单.我们只添加一个额外的ROWNUM过滤器:

WHERE ...
  AND ROWNUM < ?
Run Code Online (Sandbox Code Playgroud)

这是非常快的,因为Oracle的CBO将考虑其执行计划考虑此过滤器,并可能应用一个FIRST_ROWS操作(类似于/*+FIRST_ROWS*/提示强制执行的操作).

然而,案例2对Oracle来说有点棘手,因为LIMIT ... OFFSET其他RDBMS中没有任何条款.因此,我们将"业务"查询嵌套在技术包装器中:

SELECT outer.* FROM (
  SELECT * FROM (
    SELECT inner.*, ROWNUM as RNUM, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
    FROM (
      [... USER SORTED business query ...]
    ) inner
  ) 
  WHERE ROWNUM < ?
) outer
WHERE outer.RNUM > ?
Run Code Online (Sandbox Code Playgroud)

请注意,TOTAL_ROWS即使不获取所有数据,也会计算该字段以了解我们将拥有多少页.现在这个分页查询通常非常令人满意.但是时不时(正如我所说,在查询5M +记录时,可能包括非索引搜索),这运行2-3分钟.

编辑:请注意,潜在的瓶颈并不容易规避,因为在分页之前必须应用排序!

我想知道,这是最先进的模拟LIMIT ... OFFSET,包括TOTAL_ROWS在Oracle中,还是有更好的解决方案,设计会更快,例如使用ROW_NUMBER() …

sql performance oracle11g rownum window-functions

10
推荐指数
1
解决办法
4807
查看次数