Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在不使用sql中的union、union all或减号函数的情况下从sql中的表中查找最后500条记录。?_Oracle_Teradata Sql Assistant_Sql Limit - Fatal编程技术网

Oracle 如何在不使用sql中的union、union all或减号函数的情况下从sql中的表中查找最后500条记录。?

Oracle 如何在不使用sql中的union、union all或减号函数的情况下从sql中的表中查找最后500条记录。?,oracle,teradata-sql-assistant,sql-limit,Oracle,Teradata Sql Assistant,Sql Limit,有没有办法不使用union、union all或减号函数从表中查找最后500条记录 我们可以使用sql中的秩、行数或稠密秩函数来实现这一点 谢谢 Rakesh您可以将SQL限制与orderby desc一起使用,以获取最后N个记录 select * from tbl_name order by id desc limit N; Teradata使用TOP SELECT TOP 500 * FROM table ORDER BY your_column Oracle 12c+使用FETCH:

有没有办法不使用union、union all或减号函数从表中查找最后500条记录

我们可以使用sql中的秩、行数或稠密秩函数来实现这一点

谢谢
Rakesh

您可以将SQL限制与orderby desc一起使用,以获取最后N个记录

select * from tbl_name order by id desc limit N;
Teradata使用TOP

SELECT TOP 500 * FROM table ORDER BY your_column
Oracle 12c+使用FETCH:

SELECT * FROM TABLE ORDER BY your_column DESC FETCH FIRST 500 ROWS ONLY
较旧的oracle使用rownum,并且orderby必须在子查询中完成:

SELECT * FROM (SELECT * FROM TABLE ORDER BY your_column DESC) WHERE rownum <= 500
并不是说它还需要一份订单;以下是跳过它时发生的情况:


Define“last 500”-除非使用
ORDER BY
子句,否则SQL结果集是无序的。另外,您已经为Teradata和Oracle标记了这个-您实际使用的是哪一个?您所说的“最后500条记录”是什么意思?我想你的意思是“最后500行”-但“最后500行”是什么意思?例如:从emp中选择*;此结果表将有1000条记录。我必须在不使用任何集合运算符的情况下获取此表的最后500条记录,并且我们也不应该使用ORDERBY子句。有什么方法可以得到结果吗?我正在使用Oracle。我标记了teradata,因为我认为两者或多或少都是相同的,MySQL和PostgreSQL中都有?。顺便说一下,我们也不应该使用订单。谢谢你的回复。但我们也不应该使用“orderby”子句。我们只需要从一个表中检索最后500条记录。在您的问题中,它在哪里声明“不允许使用order by”?问一个问题,得到一个详细的答案,然后说“哦,你的答案是错误的,因为我从来没有告诉过你”——这是很不礼貌的。如果你在问题中犯了一个错误,试图改变它会严重影响答案,那么最好只接受其中一个答案,然后问一个新问题。如果你不使用order,那么就没有“last”这个词。这个问题现在恐怕无法回答,可能是因为在SQL DB中,如果不对行进行排序,就不可能有“last”的概念。在采访中,有人问我这个问题,他告诉我不要使用set运算符和order by。他告诉我们可以通过分析函数实现这一点。我尝试过,但没有找到解决方案。我想我会从这群人那里得到一些解决方案。所以我在这里发布。抱歉,如果问题完全错了。分析函数使用ORDER BY,所以他错了。我很抱歉,我还是做了编辑。下次你在这里就面试问题征求意见时,请清楚地说明情况确实如此。我们最终会猜测你对其他人提出的问题(也可能不理解)的误解——最好是直截了当,因为我们处理的不仅是实际问题,还可能是由于对主题领域(包括你和面试官)缺乏了解而导致的潜在误解
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY your_column DESC) rn FROM TABLE) WHERE rn <= 500
SELECT * 
FROM
  (
    SELECT *, ROW_NUMBER() OVER(ORDER BY your_column DESC) as rn
    FROM table
  ) x
WHERE x.rn < 501