Oracle 如何在不使用sql中的union、union all或减号函数的情况下从sql中的表中查找最后500条记录。?
有没有办法不使用union、union all或减号函数从表中查找最后500条记录 我们可以使用sql中的秩、行数或稠密秩函数来实现这一点 谢谢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:
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