如何在不使用sql server2005中的order by子句的情况下以降序获取最后的记录?

问题描述:

我正在使用sql server 2005.我有一个包含超过2万个记录的表。我想以降序显示最后10条记录。我用这个查询来获得记录如何在不使用sql server2005中的order by子句的情况下以降序获取最后的记录?

select * from course as 
where courseid not in (select top ((select count(*) from course) - 3) courseid 
    from course ) order by courseid desc 

但我的dba要求对记录进行排序而不使用order by子句......这可能吗?我是新的SQL Server2005。我怎样才能做到这一点?

+0

你会惊奇地发现很多人不记得什么“十万”的意思。请翻译成英文。 –

+0

查看本[回答] [1]。 [1]:http://*.com/questions/311054/how-do-i-select-last-5-rows-in-a-table-without-sorting – franklins

+0

2万卢比(2 ,00,000)=> 200,000(二十万) – franklins

不可能可靠无需明确使用ORDER BY即可获得排序结果。

来源:

The Beatles versus the Stones

Without ORDER BY, there is no default sort order

+0

你的链接都指向同一个地方。 –

+0

谢谢;固定“披头士与石头”链接。这是更好/更简单的例子,因为任何人都可以重复。 – Gibron

得到最后10条记录按降序排列只需使用

SELECT TOP 10 * 
FROM course 
ORDER BY courseid DESC 

也许你误解了你的DBA的投诉?可能他们抱怨,因为你当前的查询

  1. 难道20万行的全表扫描,以获得数
  2. 然后就另一次扫描,以获得最高199997 IDS
  3. 并使用它在反半连接针对200,000行的另一个完整扫描

因此,您的查询意味着处理的行数比看起来需要的多60,000倍。

Plan